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.
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. –
@MichaelFouarakis Danke, das klingt interessant –