2016-08-01 24 views
5

Ich schaue auf ein Backtrace in Gdb, und es sieht wirklich überladen wegen all der Anrufe in die Standard-Bibliothek und Boost gemacht. Z.B. Ich sehe boost::bind und std::allocator auf dem Aufruf-Stack und mehrere andere ähnliche Aufrufe in die Standardbibliothek oder Boost.Backtrace - Standard-Bibliothek ausblenden und Boost Anrufe

Ich denke, ich würde es hilfreich finden, wenn mir backtrace nur die Funktionen zeigen würde, die explizit in meinem Programm definiert sind. Besser noch, es würde weiter helfen, wenn ich den Backtrace-Befehl schnell konfigurieren könnte, um die Anrufe std und boost ein- oder auszublenden, wenn ich sie brauche.

Haben Sie eine Idee, wie Sie boost aus dem Call-Stack insgesamt ausblenden oder Backtrace konfigurieren, um Boost-Logging ein- und auszuschalten?

Antwort

3

Es gibt keine integrierte Möglichkeit, dies zu tun.

Es kann jedoch getan werden, indem Sie einen Python "Frame-Filter" schreiben, der die Frames fallen lässt, die Sie nicht sehen wollen. Dies ist nicht besonders schwierig, erfordert jedoch das Schreiben von etwas Python-Code mit der API gdb Python.

+0

Klingt interessant, könnten Sie auf ein Beispiel zeigen? – sergej

+2

Hier ist ein Rahmenfilter, der die Ausgabe einfärbt. Das wichtige Bit ist https://github.com/tromey/gdb-helpers/blob/master/gdbhelpers/colorize.py#L116 - dies ist die Klasse, die den Rahmenfilter implementiert. Sie könnten einfach Frames fallen lassen, die Ihnen egal sind. –