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-progA moins qu'il y ait une astuce avec gdb...
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()
...
Merci d'avance !
# gdb
Posté par Ph Husson (site web personnel) . Évalué à 0.
tu fait
gdb tonprog
dans le 'prompt'
run <les arguments pour ton programe>
et voila ton miracle est realisé :)
[^] # Re: gdb
Posté par Vincent Richard (site web personnel) . Évalué à 2.
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 Dalvany . Évalué à 3.
[^] # Re: gdb
Posté par gnumdk (site web personnel) . Évalué à 1.
[^] # Re: gdb
Posté par gc (site web personnel) . Évalué à 2.
# Valgrind
Posté par Gof (site web personnel) . Évalué à 5.
Il te trouve plein de problèmes dans ton programme.
http://valgrind.kde.org/(...)
[^] # Re: Valgrind
Posté par Vincent Richard (site web personnel) . Évalué à 2.
# . . .
Posté par nullisimo . Évalué à 2.
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 Jonathan ILIAS-PILLET (site web personnel) . Évalué à 2.
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.