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++ Discussion :

exception avec report automatique de ligne d'erreur


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Ingénieur consultant
    Inscrit en
    Novembre 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur consultant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 64
    Par défaut exception avec report automatique de ligne d'erreur
    Bonjour, je cherche à créer des rapports d'erreur automatique avec info de ligne. Voici l'exemple suivant:

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    class MonException : public exception
    {
      vector<int> _line;
      MonException(int line)
      {
        _line.push_back(line);
      }
     
      void what()
      {
        for (int i=0 ; i < _line.size() ; ++i)
          cout << "error at " << _line[i] << endl;
      }
     
      void up(int line)
      {
        _line.push_back(line);
      }
    }
     
    void inner_boom(void)
    {
      try
      {
        //Some error
        throw MonException(__LINE__);
      }
      catch(MonException e)
      {
        e.up(__LINE__);
        throw e;
      }
    }
     
    void boom(void)
    {
      try
      {
        inner_boom();
      }
      catch(MonException e)
      {
        e.up(__LINE__);
        throw e;
      }
    }
     
    void main()
    {
      try
      {
        boom();
        boom();
      }
      catch(MonException e)
      {
        e.what();
      }
    }

    Dans mon exemple je peux tracer (presque) toute la remontée de la chaine d'erreur:
    - A quel endroit ça a pété dans la fonction inner_boom et où l'exception a été traitée.
    - Puis je peux savoir qu'elle est passée par la fonction boom
    - Au final dans le main je peux faire un affichage de toute la remontée de l'erreur

    Il manque une chose : Je ne sais pas comment faire pour savoir si ça a pété au 1er ou au 2eme appel à boom dans le main

  2. #2
    Membre expérimenté
    Homme Profil pro
    Analyse système
    Inscrit en
    Novembre 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 227
    Par défaut
    Il existe en C des macro qui donne le numéro de ligne dans le code "__LINE__"
    cf. macro prédéfinies

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 47
    Par défaut
    Il n'est pas possible de faire ça seulement avec la bibliothèque standard et les macros prédéfinies (parce qu'il faudrait mettre d'une façon ou d'une autre un __LINE__ à chaque ligne de code).

    Il y a des bibliothèques qui permettent ça. Ex: http://stacktrace.sourceforge.net/ qui utilise backtrace sous linux/unix et avec les programmes compilés avec gcc, et stackwalker (qui utilise dbghelp.dll) sous windows.
    En tout cas, entourer toutes les fonctions par des try/catch n'est pas nécessaire pour obtenir ces informations et n'est surtout pas très pratique à maintenir.

    Et pour avoir les numéros de lignes au lieu des adresses du code fautif dans les fonctions, je crois que tu dois compiler avec les infos de débogage (-g pour gcc).

  4. #4
    Membre confirmé
    Profil pro
    Ingénieur consultant
    Inscrit en
    Novembre 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur consultant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 64
    Par défaut
    C'est intéressant je ne connaissais pas stacktrace, merci pour l'info.

    Pour aller jusqu'au bout de mon log d'erreur automatique, j'aimerai un mécanisme automatique qui me permette de connaitre la liste des paramètres (avec leur nom et leur type) en entrée d'une fonction pour en cas de plantage pouvoir sortir où ça a pété et avoir qq infos sur le contexte d'exécution.

    J'ai vu que dans les extensions spécifiques de gcc il y avait des éléments pour connaitre le nom de la fonction courante, mais je n'ai rien vu pour les paramètres. Quand à Visual studio là je connais rien...

    Si qq un connais des choses qui existent ?

  5. #5
    Membre chevronné
    Inscrit en
    Novembre 2006
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Par défaut
    Bonjour,

    Je sais que boost.log fait ça, et donc que ça doit être possible.
    Après, je ne sais pas comment.

    Cela dit, je ne dis pas qu'il faut utiliser boost.log

Discussions similaires

  1. insertion ligne avec filtres automatiques actifs
    Par doremifaso dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 23/06/2008, 12h53
  2. Avoir 3 blocs aligné sur la même ligne avec hauteur automatique
    Par arnaudperfect dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 30/01/2008, 02h06
  3. [GD] Erreur 500 avec script d'une ligne
    Par keul dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 24/09/2007, 10h50
  4. Réponses: 9
    Dernier message: 15/02/2007, 13h57
  5. Erreur d'exception avec le TComPort
    Par vantoff dans le forum C++Builder
    Réponses: 3
    Dernier message: 10/08/2006, 11h46

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