2017-05-24 1 views
0

Kann jemand ein Beispiel geben, wie der Aufruf-Stack des aktuell ausgeführten C++ - Programms unter Windows programmgesteuert abgerufen werden kann? Von einigen Threads (z. B. print call stack in C or C++) Ich habe einen Vorschlag, DbgHelp zu verwenden. Die Bibliothek scheint jedoch ziemlich groß zu sein und für viele weitere Funktionen als nur den Aufrufstapel gedacht, so dass das Studium der Bibliothek ohne ein Beispiel zu lange dauern kann. Auch die Bibliothek scheint veraltet, weil die letzte Version, 6.12, vom 01. Februar 2010 datiert ist (7 Jahre alt ab sofort). Gibt es etwas Neues, um Callstack von C++ zu bekommen?Beispiel für das Abrufen von C++ - Aufrufstack unter Windows

Wenn Sie ein Beispiel für die Verwendung von DbgHelp geben, können Sie auch beschreiben, wie Sie es installieren, zum Projekt hinzufügen und mit meinem Programm versenden?

Ich möchte undecorated Namen aller Funktionen auf dem Call-Stack, vorzugsweise mit Werten der Parameter.

+1

[Boost.Stacktrace] (http://boostorg.github.io/stacktrace/index.html) – genpfault

Antwort

0

Es ist nicht eine riesige Menge an Arbeit selbst den Call-Stack zu durchqueren durch EBP knallen, CaptureStackBackTrace (https://msdn.microsoft.com/en-us/library/windows/desktop/bb204633(v=vs.85).aspx) wird für Sie tun, wenn Sie es nicht selbst tun wollen.

+0

Wie ich verstehe, wird dies nur die Adressen geben, aber nicht Symbole (Funktionsnamen). –

+1

Je nachdem, wie das Programm kompiliert wurde, sind die Symbole möglicherweise nicht einmal in der ausführbaren Datei vorhanden. –

+0

Das Ermitteln der Symbole ist das Ziel der Debug-Hilfebibliothek, die Sie nicht verwenden wollten. (https://msdn.microsoft.com/en-us/library/windows/desktop/ms679309(v=vs.85).aspx) Die Symbole können in einer Reihe von Dateien und je nachdem, wo Sie erhalten Sie haben einen variablen Callstack. Wenn Sie sie nur aus einer Exe herausholen wollen, müssen Sie einen PE-Parser schreiben - https://msdn.microsoft.com/en-us/library/ms809762.aspx. pdb's haben die reichste Quelle von Symbolen, aber ich würde nicht empfehlen, sie selbst zu analysieren. –

Verwandte Themen