Frage

Ich möchte den Call-Stack zur Laufzeit für den Zugriff auf eine native C ++ Anwendung. Ich bin der IDE nicht verwenden. Wie kann ich den Call-Stack angezeigt werden?

Update: Ich habe eine Funktion, die von vielen Punkten auf der ganzen Anwendung aufgerufen wird. Er stürzt in seltenen Fällen. Ich war auf der Suche nach einer Möglichkeit, den Namen des Anrufers zu erhalten und melden Sie es.

Andere Tipps

Hier finden Sie aktuelle StackWalk64 .

Wenn Sie tun dies auf .NET gewohnt sind, dann sind Sie in für eine böse Überraschung.

Sie sollten betrachten Sie Ihre nicht behandelte Ausnahme Filter und ein Schreiben Minidump-Datei aus innerhalb dieser Gruppe. Es ist gar nicht so kompliziert und ist gut dokumentiert . Just-Stick auf das Minimum von Dingen, die Sie einmal in Ihrem nicht behandelte Ausnahme Filter tun (lesen Sie, was können alles schief gehen , wenn Sie kreativ).

Aber auf der sicheren Seite zu sein (Ihr nicht behandelte Ausnahme Filter möglicherweise versehentlich überschrieben werden), könnten Sie Ihren Code hineingelegt __try / __ außer Block und schreiben die minidump aus der Filterfunktion (beachten Sie, Sie können keine Objekte haben, die automatische erfordern Abwickeln in einer Funktion mit __try / __ außer Block, wenn Sie sie tun müssen, sollten sie in eine separate Funktion setzen):

lange __stdcall myFilter (EXCEPTION_POINTERS * pexcept_info)
{
mycreateminidump (pexcept_info);
Rückkehr EXCEPTION_EXECUTE_HANDLER;
}
Leere myfunc ()
{
__try {
// Ihre Logik hier
} __Except (myFilter (GetExceptionInformation ())) {
// Ausnahme behandelt
}
}

Sie können dann mit einem Debugger Ihrer Wahl die Dump-Datei überprüfen. Visual Studio und Debugger von Windows-Debugging Tools-Paket können minidumps behandeln.

  

Es stürzt bei seltenen Gelegenheiten. Ich war auf der Suche nach einer Möglichkeit, den Namen des Anrufers zu erhalten und melden Sie es.

Was meinst du stürzt? Zugriffsverletzung? Geteilt durch Null? was genau? Ist es mit Kernel-Modus-Komponenten interagieren?

Schalten Sie AppVerifier. das sollte eine Menge Dinge beseitigen.

erstellen folgt aus:

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 32-Bit-Code mit WOW laufen lassen, müssen Sie dies unter der wow3264node tun.

scroll top