Debuggen von Bitcoin

Wie hängt man eine GDB an einen Bitcoin-Daemon an? Ich möchte die Funktionen schrittweise durchgehen. Hier ist, was ich versucht habe.

gdb --args bitcoind -regtest -daemon

Diese ist jedoch vorhanden, wenn der Daemon startet. Also habe ich versucht, nach dem Fork über die PID anzuhängen.

gdb -p 841
(gdb) file /usr/local/bin/bitcoind
Reading symbols from /usr/local/bin/bitcoind...done.
(gdb) b sendtoaddress
Breakpoint 1 at 0x4b4d34: file wallet/rpcwallet.cpp, line 379.    
r
starting program...    

Dies funktioniert jedoch nicht, wenn ich eine Transaktion mit dem bitcoin-cli-Client aufrufe. Gibt es etwas, was ich vermisse. Ich habe --enable debug on configure verwendet.

Vielen Dank.

Versuch gdb /path/to/bitcoindund dann attach 841. Aber auf welchem ​​OS bist du? Einige erlauben normalen Benutzern nicht, Debugger an laufende Prozesse anzuhängen; Sie müssten root sein. Nicht rbeim Anhängen an einen laufenden Prozess verwenden; damit fängt es von vorne an.
@NateEldredge: Cheers, es hat funktioniert, als ich root war. Seltsamerweise musste ich n auf der Konsole drücken, damit die Ablaufverfolgung beginnen konnte. Entschuldigung für Ninja, probiere ein paar Dinge aus.
Es ist nicht seltsam. Die Verwendung von attach(oder -p) stoppt einfach den Prozess, wo immer er sich befindet, und lässt Sie seinen Zustand überprüfen (z . B. where, print, ...), Haltepunkte setzen und seinen Speicher ändern, wenn Sie dies wünschen. Wenn Sie möchten, dass der Prozess eine weitere Ausführung durchführt, müssen Sie einen entsprechenden Befehl ( n,s,c) ausgeben.

Antworten (2)

Wie Nate Eldrige kommentierte:

Versuchen Sie es mit gdb /path/to/bitcoind und hängen Sie dann 841 an. Auf welchem ​​​​Betriebssystem verwenden Sie jedoch? Einige erlauben normalen Benutzern nicht, Debugger an laufende Prozesse anzuhängen; Sie müssten root sein. Verwenden Sie r nicht beim Anhängen an einen laufenden Prozess; damit fängt es von vorne an

Die Verwendung von Attach (oder -p) stoppt einfach den Prozess, wo immer er sich befindet, und lässt Sie seinen Status überprüfen (z. B. wo, drucken, ...), Haltepunkte setzen und seinen Speicher ändern, wenn Sie dies wünschen. Wenn Sie möchten, dass der Prozess eine weitere Ausführung durchführt, müssen Sie einen entsprechenden Befehl (n,s,c) ausgeben.

Wenn Sie MacOS verwenden, könnte dieses Dokument von Fabian Jahr nützlich sein. Er empfiehlt die Verwendung von lldb anstelle von gdb, wenn Sie MacOS verwenden.