2016-11-15 3 views
0

Gibt es eine Möglichkeit, die Ausführung in Gdb fortzusetzen, bis eine Funktion aufgerufen wird und dann in dieser Funktion anhalten? Es ist ein Schmerz, n und s für den Code zu verwenden, mit dem ich arbeite. Ich würde viel lieber eine nextFrame und fin, unter der Annahme, dass eine nextFrame existiert, die mich in eine neue Funktion nahm. Es wäre besonders cool, wenn nextFrame mir sagen könnte, wenn wir nur den Stapel aus dem aktuellen Bereich abwickeln, d. H. Wir machen keinen weiteren Funktionsaufruf, und dann könnte es in der letzten Zeile des aktuellen Bereichs anhalten.gdb Ausführung fortsetzen, bis neuer Frame auf dem Aufrufstack

Grundsätzlich möchte ich meine Codebasis aus einer Callstack-Perspektive und nicht aus einer zeilenweisen Perspektive anzeigen.

P.S. Angenommen, eine solche Einrichtung existiert, würde ich mir vorstellen, dass es problematisch ist, mit boost zu verwenden. Z.B. Wenn ich eine Zeile wie boost::shared_ptr<MyType> a = foo(); habe, wird es zuerst innerhalb boost Code pausieren, bevor es innerhalb foo() pausiert. Dies ist ein Problem, weil ich nicht an dem Boost-Code interessiert bin und nur sehen möchte, was sich in foo befindet.

P.S. Ich habe auch klingeln. Ich frage mich, ob das in Klängen möglich ist.

+2

Sie können GDB entweder programmieren: Setzen Sie Breakpoints für alle Funktionen (Symbole), wenn Sie Debugging-Informationen haben, oder automatisch für Sie und brechen Sie "Call" und "ret" Anweisungen und Äquivalente. Mehrere Implementierungen dieser Ansätze gibt es da draußen. –

+0

@MichaelFouarakis Danke, das klingt interessant –

Antwort

0

Verwenden Sie b function_name, um den Unterbrechungspunkt innerhalb einer Funktion anzuwenden. Ihr Programm wird bei der Eingabe dieser Funktion angehalten. Alternativ können Sie auch b filename:line_number verwenden, um die Ausführung Ihres Programms an der bestimmten Zeile in einer Datei anzuhalten.

+0

Dies ist keine bessere Alternative zu nächsten und Schritt –

Verwandte Themen