Wie verhindere ich die Ausführung in GDB, ohne einen Haltepunkt?
Wie verhindere ich, dass ein GDB Ausführung ohne Haltepunkt?
- Wie wurde der Prozess begonnen? Wie hast du das hängen? Standardmäßig ist die Befestigung mit
gdb --pid
Stoppt den Prozess bereits. Meinst du nachdem Sie trafc
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur verwenden einen regelmäßigen interrupt Strg-c wird gut funktionieren. GDB nur leitet die
SIGINT
der debugging-Prozess, der dann stirbt. GDB fangen die nicht-standard-Ausgang und brechen den Prozess, so können Sie immer noch prüfen, alle threads, die Stapel und die aktuellen Werte der Variablen. Dies funktioniert gut, wenn Sie wären besser dran mit break-Punkte. Das einzige mal, dass ich mich selbst zu finden, dies zu tun ist, wenn ich denke, ich habe mich in eine Art Endlosschleife.c
wieder oderdetach
macht es weiterhin von wo es aufgehört.^c
nicht für mich arbeiten, weil meine Bewerbung fängt ihn auf und stirbt in würde. Irgendwelche anderen Vorschläge?sigwait()
- vgl. stackoverflow.com/a/6442197/427158 für einen workaround.GUI-Anwendungen nicht reagieren ^C und ^Brechen die Weg, Konsole-Anwendungen. Da in diesen Tagen die meisten nicht-trivialen Projekte neigen dazu, GUI-Anwendungen oder Bibliotheken, die in Erster Linie in GUI-Anwendungen, haben Sie zwei Möglichkeiten:
Send SIGSTOP, um die Anwendung von einem separaten terminal. Dies ist mühsam.
Wenn Sie die Taste ^C oder ^Pause auf die GDB-Eingabeaufforderung von GDB beendet, aber die Anwendung wird weiterhin ausgeführt. Sie können dann GDB wieder zu befestigen, um es mit den
-p
Befehl-Linie Schalter. Damit verliert debugger-Status.In beiden Fällen, vielleicht finden Sie diese hilfreiche:
tasklist | grep
ProcessName
| sed -e 's/
ProcessName
*\([0-9]*\).*/gdb
ModuleName
-pid=\1/' > rungdb.sh
können Sie ändern, diese für die Verwendung in shell-Skripte, makefiles oder um ein signal zu senden anstelle von anfügen GDB.info threads
wird Ihnen helfen, herauszufinden, welcher thread, den Sie betrachten möchten. Dann nutzen Siethread
ThreadNumber
, um es zu wechseln.Starten Sie eine shell, finden Sie die Prozess-ID mit ps aus und senden Sie es SIGSTOP oder SIGINT mit dem kill-Befehl (z.B. kill -INT pid).
Geben Sie einfach BRECHEN, ohne irgendwelche Argumente.
Brechen, wenn der Aufruf ohne Argumente, break setzt einen breakpoint an die nächste Anweisung ausgeführt werden, die in der ausgewählten stack-frame
Strg + Z scheint zu funktionieren für mich (aber nur in einigen Fällen - ich bin nicht sicher, warum).