Kann ich angeben, dass gdb in Zeile x unterbrochen werden soll, wenn char* x
auf eine Zeichenfolge gezeigt wird, deren Wert gleich ist "hello"
? Wenn ja, wie?
c
debugging
gdb
conditional-breakpoint
341008
quelle
quelle
strncmp
undstrstr
sind weitere nützliche C-Abfragefunktionen.Antworten:
Sie können verwenden
strcmp
:20
ist die Zeilennummer,x
kann ein beliebiger Dateiname undy
eine beliebige Variable sein.quelle
No symbol "strcmp" in current context.
run
, damit dynamische Bibliotheken geladen werden. Für die Quelle googeln Sie es und finden Sie: stackoverflow.com/questions/10000335/… :-)$_streq
Methode von @tlwhitec ist besser.Bei einigen Implementierungen kennt gdb den Rückgabetyp von strcmp möglicherweise nicht. Das heißt, Sie müssten gießen, sonst würde es immer als wahr bewertet!
quelle
Seit GDB 7.5 können Sie diese nativen Komfortfunktionen verwenden :
Scheint weniger problematisch zu sein, als
strcmp()
jedes Mal, wenn der Haltepunkt erreicht wird , ein "Fremd" auf dem Prozessstapel ausführen zu müssen . Dies gilt insbesondere für das Debuggen von Multithread-Prozessen.Für Ihren Demo-Fall wäre die Verwendung
oder wenn Ihr Haltepunkt bereits vorhanden ist und Sie nur die Bedingung hinzufügen möchten
$_streq
Entspricht nur der gesamten Zeichenfolge. Wenn Sie also etwas schlaueres möchten, sollten Sie es verwenden$_regex
, das die Python-Syntax für reguläre Ausdrücke unterstützt .quelle