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.
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.
Nate Eldredge
gdb /path/to/bitcoind
und dannattach 841
. Aber auf welchem OS bist du? Einige erlauben normalen Benutzern nicht, Debugger an laufende Prozesse anzuhängen; Sie müssten root sein. Nichtr
beim Anhängen an einen laufenden Prozess verwenden; damit fängt es von vorne an.Bobo
Nate Eldredge
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.