Call-Stack zur Laufzeit
Ich für den Zugriff auf den call-stack zur Laufzeit in Nativen C++ - Anwendung. Ich bin nicht mit der IDE. Wie kann ich die Anzeige der call-stack?
Update: ich habe eine Funktion, die aufgerufen wird von vielen Punkten, über die Anwendung. Stürzt es nur bei seltenen Gelegenheiten. Ich war auf der Suche nach einem Weg, um den Namen des Anrufers und melden Sie es.
InformationsquelleAutor Agnel Kurian | 2008-09-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, dass diese Seite hat die Antwort, die Sie suchen. Sie sagte, Visual C also ich nehme an, du meinst windows.
InformationsquelleAutor Mark
Haben Sie einen Blick auf StackWalk64.
Wenn Sie ' re verwendet, um dies zu tun .NET, dann sind Sie in für eine böse überraschung.
InformationsquelleAutor Will Dean
Sollten Sie erwägen, Ihre unhandled exception filter und schreiben Sie eine minidump-Datei aus. Es ist nicht zu kompliziert und ist gut dokumentiert.
Just-stick an das minimum der Dinge, die Sie tun, wenn in deinem filter nicht behandelte Ausnahme (Lesen Sie, was kann alle schief gehen wenn Sie kreativ).
Aber um auf der sicheren Seite sein (Ihr unhandled exception filter bekommen könnte, die unbeabsichtigt überschrieben wurden), könnten Sie Ihren code im __try/__except-block und schreiben die minidump aus, die innerhalb der filter-Funktion (beachten Sie, können Sie nicht über die Gegenstände, deren automatische unwinding-in eine Funktion mit __try/__except-block, wenn Sie haben, in Erwägung ziehen, Sie in eine separate Funktion):
Können Sie überprüfen Sie dann die dump-Datei mit einem debugger deiner Wahl. Sowohl Visual Studio-Debugger von Windows Debugging Tools-Paket verarbeiten kann minidumps.
InformationsquelleAutor deemok
Wenn Sie wollen, um einen callstack, der Absturz, was Sie wirklich wollen, zu tun ist,post-mortem-debugging. Wenn Sie prüfen möchten, callstack, der Anwendung, während es ausgeführt wird, ist dies eine der vielen Funktionen SysInternals Process Explorer anbieten können.
InformationsquelleAutor Suma
Wenn Sie nicht aktiv Debuggen, können Sie "Abstürzen" der app, um zu produzieren ein minidump (dies ist nicht-invasiv und ermöglicht die app weiter ausgeführt). IIRC DrWatson lassen Sie dies tun, wenn nicht userdump von MS unterstützt wird.
Können Sie dann laden Sie den dump in windbg und sehen Sie die Aufrufliste + Variablen etc. gibt. Sie müssen Ihre app-Symbole, um die Sinn die Spur.
Wenn Sie suchen für eine einfachere run-time-code style-Spuren, dem empfehle ich eine einfache Klasse, die Sie instanziieren, die auf jede Methode, die Konstruktor schreibt den Namen der Methode, mit OutputDebugString. Verwenden WinDebug zum anzeigen der Spur, wie das Programm läuft. (setzen Sie irgendeine form von Kontrolle in Ihrer Klasse, auch wenn es nur eine Globale variable oder registry-Wert, oder die Globale Atom, so können Sie drehen Sie die Verfolgung auf-oder ausgeschaltet wird).
InformationsquelleAutor gbjbaanb
Was meinst du mit " stürzt es ab? Zugriffsverletzung? Division durch null? was genau? Ist das Zusammenwirken mit Komponenten der kernel-Modus?
Schalten Sie appverifier. das sollte beseitigen eine Menge Dinge.
erstellen:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\FileName.exe
unter diesem Schlüssel erstellen Sie eine neue Zeichenfolge
name : debugger -
Wert: c:\pathtowindbg\windbg.exe -gG -xe av
Wenn Sie mit 32bit code mit WOW, Sie müssen diese unter dem wow3264node.
InformationsquelleAutor