47 votes

Numéro de ligne du défaut de segmentation

Y a-t-il une option gcc que je peux définir qui me donnera le numéro de ligne du défaut de segmentation?

Je sais que je peux:

  1. Déboguer ligne par ligne
  2. Mettez printfs dans le code pour affiner.

Modifications:

  1. bt / where sur gdb donnent Pas de pile.
  2. Suggestion utile

64voto

rck Points 845

Je ne sais pas de gcc avec l'option, mais vous devriez être capable d'exécuter l'application à l'aide de gdb et puis quand il se bloque, tapez where afin de prendre un coup d'oeil à la pile quand il est sorti, ce qui devrait vous conduire à proximité.

$ gdb blah
(gdb) run
(gdb) where

Edit complet:

Vous devez également vous assurer de générer l'application avec les indicateurs de débogage à l'aide de l' -g gcc avec l'option d'inclure les numéros de ligne dans le fichier exécutable.

Une autre option est d'utiliser l' bt (backtrace) de commande.

21voto

Jonas Kölker Points 4520

Voici une session shell / gdb complète

$ gcc -ggdb myproj.c
$ gdb a.out
gdb> run --some-option = foo --other-option = bar
(gdb dira que votre programme a rencontré une erreur de segmentation)
gdb> bt
(gdb imprime une trace de pile)
gdb> q
[êtes-vous sûr, votre programme est toujours en cours d'exécution]? y
$ emacs myproj.c # heh, je sais quelle est l'erreur maintenant ...

Bon piratage :-)

10voto

tgamblin Points 25755

Vous pouvez obtenir de gcc pour vous imprimez une stacktrace lorsque votre programme reçoit un signal SEGV, semblable à la façon dont Java et d'autres plus convivial langues poignée de pointeur null exceptions. Voir ma réponse ici pour plus de détails:

La bonne chose à ce sujet est que vous pouvez simplement le laisser dans votre code, vous n'avez pas besoin de faire les choses par gdb pour obtenir le bon de sortie de débogage.

Si vous compilez avec -g et suivez les instructions, vous pouvez utiliser un outil en ligne de commande comme addr2line pour obtenir le fichier/information en ligne à partir de la sortie.

7voto

anonnn Points 249

Exécutez-le sous valgrind.

4voto

cbrulak Points 4262

vous devez également construire avec des drapeaux de débogage sur -g

Vous pouvez également ouvrir le vidage de mémoire avec gdb (vous avez besoin de -g cependant).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X