Journal Trace d'un programme pour débogage

Posté par  (site web personnel) .
Étiquettes : aucune
0
21
mai
2004
Bonsoir,

Je cherche un outil capable d'exécuter un programme et de créer en même temps que le programme s'exécute une sorte de log : entrée dans une fonction, numéro de ligne, etc... et qui s'arrête à la fin du programme ou sur un plantage (dans mon cas, un segfault).

Apparement, gdb ne permet pas de faire ça, sinon je n'aurais pas posé la question. Une solution avec gdb est de le faire à la main : "step" jusqu'à ce que ça plante, mais je ne tiens pas à y passer 6 heures...

Il y a bien le backtrace de gdb aussi, mais ça ne fonctionne pas non plus pour mon cas : il semblerait que le stack soit corrompu et gdb ne retrouve plus ses petits (arbre des appels) quand je lui demande (il affiche "??").

Le rêve :
$ outil-magique mon-prog
main()
appel de fonction1() ligne 1
appel de fonction1_1() ligne 12
retour dans fonction1()
appel de fonction1_2() ligne 34
retour dans fonction1()
retour dans main()
appel de fonction2() ligne 2
[SEGFAULT]
je suis à la ligne 42 dans fonction2()
...
A moins qu'il y ait une astuce avec gdb...

Merci d'avance !
  • # gdb

    Posté par  (site web personnel) . Évalué à 0.

    Tu compile ton programme avec l'option -g (a tout les passages compil et linkage)
    tu fait
    gdb tonprog
    dans le 'prompt'
    run <les arguments pour ton programe>
    et voila ton miracle est realisé :)
    • [^] # Re: gdb

      Posté par  (site web personnel) . Évalué à 2.

      Oui mais non ! :-)

      Comme je l'ai dis, il faut que je sache *avant* le segfault où le programme en était exactement. Car après ce fameux segfault, gdb ne parvient plus à remonter dans le stack... D'où mon idée d'une trace.

      Oui, oui, je sais, c'est un bug-de-la-mort-qui-tue au point de pourrir le stack et c'est pour ça qu'il faut que je l'éradique ! :-)
      • [^] # Re: gdb

        Posté par  . Évalué à 3.

        Je suis un newb, mais y'a pas un truc dans la même veine que strace mais pas pour les signaux systemes ?
  • # Valgrind

    Posté par  (site web personnel) . Évalué à 5.

    Tu peux essayer valgrind.
    Il te trouve plein de problèmes dans ton programme.

    http://valgrind.kde.org/(...)
  • # . . .

    Posté par  . Évalué à 2.

    si gdb affiche "?? ()" ce n'est pas parceque ton programme malmene la stack mais tout simplement que la fonction appartient a une lib qui n'est pas compilee avec -g.
    En gros, tu appelles une fonction d'une lib externe et ca chie.
    2 solutions:
    1. la lib a un pb
    2. Tu n'as pas assez RTFM
  • # GCOV

    Posté par  (site web personnel) . Évalué à 2.

    Je n'ai pas essayé de le faire marcher (je fais plutôt du développement "embarqué", et ça n'a pas l'air adapté pour ça), mais il me semble que gcov correspond à ce que tu recherches.

    Sauf erreur de ma part, il est distribué avec GCC (sinon avec binutils).

    Bon c'est une info de tête, donc ça vaut ce que ça vaut, mais si ça peut te donner une piste intéressante...

    HTH

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.