2017-05-18 5 views
1

Ich versuche, Gdb zu verwenden, um meine Assembly-Unterroutine zu debuggen, hatte jedoch Probleme zu ermitteln, wo genau das Programm einen Segfault erreicht.Verwenden von GDB, um genau zu finden, wo der Fehler auftritt (SPARC-Assembly)

ich es laufen, bis er die segfault erreicht, dann mit dem ‚wo‘ Befehl, der mir diese gibt:

0x00010e40 in swapChars() 

Gibt es eine Möglichkeit für mich, genau herauszufinden, was die segfault Linie an in aufgetreten meine Unterroutine?

+0

'x/i $ pc' zeigt die aktuelle Anweisung an. Sie können bei Bedarf auch nach weiteren Kontexten fragen, siehe Hilfe. Sie benötigen dazu keine Debug-Informationen. – Jester

Antwort

1

Gibt es eine Möglichkeit für mich, genau herauszufinden, in welcher Zeile der Fehler in meinem Unterprogramm aufgetreten ist?

Ja: Sie müssen Ihr Programm mit Debugging-Informationen kompilieren (die Ausgabe, die Sie zur Verfügung gestellt haben, zeigt, dass Sie wahrscheinlich nicht haben).

Normalerweise ist das so einfach wie das Hinzufügen -g zu CFLAGS.

In einigen Programmen fehlen Debug-Informationen, da auf der Verbindungslinie ein streunender -s (strip debug info) -Flag steht.

0

Verwenden Sie in gdb den Befehl 'layout asm' und es wird zu einer Ansicht des Assembly-Codes gewechselt. Dann sollten Sie genau sehen können, welcher Befehl den Fehler verursacht hat.

Verwandte Themen