IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Convertir un offset en numero de ligne


Sujet :

C++Builder

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 45
    Par défaut Convertir un offset en numero de ligne
    Bonjour,

    J'ai écrit un programme avec C++Builder.
    Il fonctionne correctement sur mes PC (à la maison et au boulot), mais il plante sur le PC de mes parents (et comme ils habitent loin, je ne peux pas déboguer sur place).

    Au moment du plantage, Windows affiche le message suivant : AppName:test.exe AppVer:0.0.0.0 ModName:test.exe ModVer:0.0.0.0 Offset:0003526C

    Y a t-il un moyen pour savoir quelle fichier source et n° de ligne correspond à l'offset 3526C ?

    Merci pour votre aide
    Alain

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Par défaut
    Ca me semble difficile... peut-être en regardant chez toi, dans le debugger CPU à quoi correspond l'opération à cet offset.

    Sinon, tu peux intégrer des informations de debug dans ton programme qui sortent dans un fichier log et demander à tes parents de t'envoyer le log. Comme ça tu pourras voir où le programme s'est arrêté:

    Pour détourner le stream cerr dans un fichier log, tu peux changer le cpp d'entrée du programme comme suit:
    1) Ajouter les includes suivants
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include <fstream>
    #include <iostream>
    2) Détourner le stream avant l'execution du stream cerr dans le fichier "debug.log" (les deux section "Manage debug" et le try ... finally)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
      //------------------ Manage debug ----------------------
      // Deviate the cerr stream in a debug file
      ofstream debug("debug.log");
      basic_streambuf<char,std::char_traits<char> > *cerrbuf=cerr.rdbuf();
      if ( debug ) cerr.rdbuf(debug.rdbuf());
     
      try {
     
        try
        {
          Application->Initialize();
          SetApplicationMainFormOnTaskBar(Application, true);
          Application->CreateForm(__classid(TForm6), &Form6);
      Application->Run();
        }
        catch (Exception &exception)
        {
          Application->ShowException(&exception);
        }
        catch (...)
        {
          try
          {
            throw Exception("");
          }
          catch (Exception &exception)
          {
            Application->ShowException(&exception);
          }
        }
      }
      __finally {
     
        //------------------ Manage debug ----------------------
        // Cancel the deviation of the cerr stream
        if (debug) {
          cerr.rdbuf(cerrbuf);
          debug.close();
        }
     
      }
     
      return 0;
     
    }
    Ensuite tu peux sortir du texte dans ton code avec le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cerr<<"Mon text"<<endl;
    Attention à bien mettre le "endl" pour forcer l'écriture du texte dans le fichier (ou un "flush"), sinon tu risques d'avoir tu texte qui est dans un buffer non sauvegardé au moment où l'application plante...

    J'espère que cela t'aidera

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 45
    Par défaut
    Merci Patrick pour tous ces conseils.

    J'avais espéré déterminé directement le numéro de ligne source, mais ça ne semble pas possible. Je vais donc installer des mouchards et des fichiers de log comme tu le proposes.

Discussions similaires

  1. [VBA-E] Récupérer le numéro de ligne où se trouve un bouton
    Par Freiya dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 28/01/2011, 23h06
  2. [VB.Net] Repeater numero de ligne et data
    Par NicoNGRI dans le forum ASP.NET
    Réponses: 6
    Dernier message: 10/10/2005, 10h20
  3. Récuperer le numero de ligne dans un RichEdit
    Par nbutin dans le forum C++Builder
    Réponses: 9
    Dernier message: 25/05/2005, 12h40
  4. Recuperer le numero de ligne d'une exception Python
    Par chrdou dans le forum Général Python
    Réponses: 4
    Dernier message: 28/02/2005, 16h58
  5. Réponses: 2
    Dernier message: 19/05/2004, 10h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo