Ich möchte eine Bedingung auf einem Gdb-Haltepunkt nur brechen, wenn ein bestimmter Funktionsname in der Backtrace erscheint. Was ist der beste Weg, dies zu tun?GDB Pause, wenn Frame in Backtrace ist
Antwort
Ich bin nicht sicher, wie Sie genau das tun, was Sie verlangen, aber eine mögliche Abhilfe, wenn Sie Zugriff auf den Quellcode der relevanten Funktion haben, ist eine globale boolesche Variable auf true
am Anfang der Funktion zu setzen und setzen Sie ihn auf false
, kurz bevor die Funktion beendet wird. Dann können Sie einen bedingten Haltepunkt setzen (mit dem Befehl condition
), um nur zu stoppen, wenn diese boolesche Variable true
ist.
Das ist, was ich am Ende getan habe, aber ich würde gerne wissen, wie um es ohne Neukompilierung zu tun. – Chazz
Eine einfachere Lösung als Python-Scripting verwendet eine temporary breakpoint.
Es sieht wie folgt aus:
b ParentFunction
command 1
tb FunctionImInterestedIn
c
end
Jedes Mal, wenn Sie in ParentFunction
brechen, werden stellen Sie eine einmalige Haltepunkt auf die Funktion, die Sie tatsächlich interessiert sind, dann weiter läuft (vermutlich bis Sie treffen dieser Haltepunkt).
Da Sie genau einmal brechen werde auf FunctionImInterestedIn
, das wird nicht funktionieren, wenn FunctionImInterestedIn
mehrfach im Zusammenhang mit ParentFunction
genannt wird und Sie bei jedem Aufruf brechen wollen.
Alternative zu rix0rrr Antwort:
b main
commands
set $inParentFunction = 0
c
end
b ParentFunction
commands
set $inParentFunction = 1
c
end
b FunctionImInterestedIn if ($inParentFunction)
- 1. gdb backtrace ohne Benutzereingabe?
- 2. GDB bedingte Pause bei Funktionsparameter
- 3. Den Backtrace für alle Threads in GDB holen
- 4. GDB leer Backtrace bei der Verwendung von Gunicorn Core Dump
- 5. Automate gdb: show backtrace bei jedem Aufruf der Funktion puts
- 6. lldb Pause nach SIGSEGV
- 7. Wie gdb-many-windows im neuen Frame laufen?
- 8. GDB: Format der Backtrace-Befehl: Rahmenlinie in mehrere Leitungen unterteilt, wenn sie in einer anderen Schale/SSH verlauf
- 9. Strange Backtrace - wo ist der Fehler?
- 10. Was ist Inf in Gdb
- 11. Get Stack Backtrace eines laufenden Prozesses
- 12. Wie kann ich den Stack-Frame mit GDB untersuchen?
- 13. Einstellung Strings in gdb
- 14. Was ist SIG44 in gdb?
- 15. Der Befehl .. Pause; in Java was wenn.?
- 16. Backtrace Schalldämpfer nicht
- 17. Backtrace - Standard-Bibliothek ausblenden und Boost Anrufe
- 18. MediaFoundation - Frame ist fertig?
- 19. Pause
- 20. Keine gdb mehr in der XCode-Konsole, wenn für den iPhone-Simulator gebaut
- 21. Wie verwenden Sie gdb?
- 22. GDB: Wie Funktionsargument Werte drucken, wenn keine Namen Symbole verfügbar
- 23. GDB Spickzettel
- 24. Autoplay/Pause wenn mouseover mouseout JQuery
- 25. auf CSS: wenn Textzeile Pause zeigen Punkte
- 26. Ruby erhalten Backtrace ohne Ausnahme
- 27. Wie PHP-Backtrace auf Live-Skript in lldb Dump dump?
- 28. in gdb
- 29. Pause TimeUtils in libgdx
- 30. Frame für Frame Animation
Mögliches Duplikat [? Gibt es eine Möglichkeit, einen Haltepunkt in gdb zu setzen, die auf dem Call-Stack bedingt ist] (http://stackoverflow.com/questions/5336403/is-there-any-way-to-set-a-breakpoint-in-gdb-das-ist-konditional-on-the-call-stac) –