it-swarm.com.de

gdb: wie drucke ich die aktuelle zeile oder finde die aktuelle zeilennummer?

list -Befehle geben eine Reihe von Zeilen aus, aber ich benötige eine einzelne Zeile, in der ich mich befinde und in der wahrscheinlich ein Fehler aufgetreten ist.

81
Boris Burkov

Ich erhalte die gleichen Informationen beim Debuggen. Allerdings nicht, während ich den Stacktrace überprüfe. Höchstwahrscheinlich hätten Sie das Optimierungsflag verwendet, denke ich. Überprüfen Sie diese Link - etwas im Zusammenhang.

Versuche es mit -g3 Optimierungsflag entfernen. Dann könnte es klappen. HTH!

16
kumar_m_kiran

Mit dem Befehl 'frame' erhalten Sie, wonach Sie suchen. (Dies kann mit 'f' abgekürzt werden). Hier ist ein Beispiel:

(gdb) frame
\#0  zmq::xsub_t::xrecv (this=0x617180, msg_=0x7ffff00008e0) at xsub.cpp:139
139         int rc = fq.recv (msg_);
(gdb)

Ohne ein Argument sagt 'frame' nur, wo Sie sich befinden (mit einem Argument ändert es den Frame). Weitere Informationen zum Frame-Befehl finden Sie hier .

88
user3162307

Denken Sie daran, dass gdb ein leistungsfähiger Befehl ist, der Anweisungen auf niedriger Ebene enthält und daher an Assembly-Konzepte gebunden ist.

Was Sie suchen, heißt de Anweisungszeiger, d.h.

Das Befehlszeigerregister zeigt auf die Speicheradresse, die der Prozessor als nächstes auszuführen versucht. Der Befehlszeiger heißt ip im 16-Bit-Modus, eip in 32-Bit-Modus und Rippen im 64-Bit-Modus.

mehr detail hier

alle bei der Ausführung von GDB verfügbaren Register können wie folgt angezeigt werden:

(gdb) info registers

damit können Sie herausfinden, in welchem ​​Modus Ihr Programm läuft (welche dieser Register existieren)

dann (hier unter Verwendung der gängigsten Register rippen heutzutage durch eip oder ersetzen sehr selten ip falls nötig):

(gdb)info line *$rip

zeigt die Zeilennummer und die Dateiquelle an

(gdb) list *$rip

wird Ihnen diese Zeile mit ein paar vorher und nachher zeigen

aber wahrscheinlich

(gdb) frame

sollte in vielen Fällen ausreichen.

16
albfan

Der Befehl where oder frame kann verwendet werden. Wobei der Befehl mehr Informationen mit dem Funktionsnamen liefert

14
pravu pp

Alle obigen Antworten sind korrekt. Ich bevorzuge den tui-Modus (Strg + X A), in dem Ihr Standort und die Funktion in einem separaten Fenster angezeigt werden, was für die Benutzer sehr hilfreich ist. Hoffe das hilft auch.

1
Mazhar MIK