2009-01-07 6 views

Antwort

15

Verwenden Sie einfach eine regelmäßige Unterbrechung Ctrl - c wird gut funktionieren. GDB leitet die SIGINT nur an den Debugging-Prozess weiter, der dann abbricht. GDB wird den Nicht-Standard-Exit abfangen und den Prozess dort unterbrechen, sodass Sie immer noch alle Threads, ihre Stacks und die aktuellen Werte der Variablen überprüfen können. Dies funktioniert gut, obwohl Sie besser Breakpoints verwenden würden. Das einzige Mal, wenn ich das mache, ist, wenn ich denke, dass ich in eine Art Endlosschleife geraten bin.

+0

Ich versuchte^C aber es hat nicht funktioniert Ich bin nicht in der Lage, etwas auf der Eingabeaufforderung einzugeben.Auch das Programm ist Multi-Threaded UI, könnte das das Problem sein? – anand

+0

Ctrl-C woks wie ich will, aber ich reproduzieren dies nicht auf GDB 7.7.1: Der Prozess schien nicht zu bekommen die Ctrl-C und sterben. Es wurde nur von GDB gestoppt, nicht getötet. Durch erneutes Drücken von 'c' oder' detach' wird es von dort fortgesetzt, wo es aufgehört hat. –

4

Geben Sie einfach BREAK ohne Argumente ein.

Break, wenn ohne Argumente aufgerufen, Pause einen Haltepunkt an den nächsten Befehlssätze

+0

Im Zusammenhang mit gdb, Laufen, Stoppen, Treten. Dies war genau die Art von "Stopp", die ich brauchte, die App zu töten wurde in der Dokumentation von gdb erklärt. +1 – hobb

4

Start Schal in dem ausgewählten Stapelrahmen ausgeführt werden, finden Sie den Prozess-ID ps und es SIGSTOP oder SIGINT senden, indem Sie der Befehl kill (zB kill -INT pid).

10

GUI-Anwendungen reagieren nicht auf^C und^Brechen Sie den Weg, den Konsolenanwendungen machen. Seit diesen Tagen der meisten nicht-triviale Projekte sind in der Regel GUI-Anwendungen oder Bibliotheken in erster Linie in GUI-Anwendungen verwendet werden, haben Sie zwei Möglichkeiten:

  1. Senden SIGSTOP die Anwendung von einem separaten Terminal. Dies ist umständlich.

  2. Wenn Sie in der GDB-Eingabeaufforderung^C oder^Break drücken, wird GDB beendet, aber die Anwendung wird weiter ausgeführt. Sie können GDB dann erneut ausführen, um es mithilfe des Befehlszeilenschalters -p anzuhängen. Das verliert Debugger-Status.

In beiden Fällen finden Sie vielleicht diese hilfreich: tasklist | grepProcessName| sed -e 's/ProcessName*\([0-9]*\).*/gdbModuleName-pid=\1/' > rungdb.sh Sie diese Skripte für die Verwendung in der Schale ändern können, Makefiles oder ein Signal anstelle des Anbringens GDB senden .

info threads wird Ihnen helfen herauszufinden, welchen Thread Sie betrachten möchten. Dann verwenden Sie threadThreadNumber, um darauf zu wechseln.

Verwandte Themen