2009-08-14 2 views
1

(Win32 Plattform C++) Mit __try und __finally, wie bekomme ich den Modulnamen (und Adresse) der Ursache für eine Ausnahme? Ich rufe GetExceptionInformation() auf, aber davon bin ich nicht sicher, wo diese Information ist.Wie bekomme ich den Modulnamen, der eine strukturierte Exception bei einer _EXCEPTION_POINTERS-Struktur verursacht hat? (Win32 C++)

Gegeben andere Ressourcen online und in MSDN die Minidump-Handler und andere Beispielcode scheinen es zu bekommen, aber ich bin mir nicht sicher, wie.

Alle Referenzen oder aufschlussreichere Ressourcen werden geschätzt.

Antwort

1

Sie möchten den Anrufstapel wie in this CodeProject article beschrieben verwenden.

Entweder können Sie den Jochen-Code so verwenden, wie er ist, oder versuchen, genug Details zu sammeln, um die gewünschten Informationen zu extrahieren.

+0

Ich werde das untersuchen, danke. – Tim

3

Der EXCEPTION_RECORD-Datensatz von EXCEPTION_POINTERS enthält die Adresse, an der die Ausnahme aufgetreten ist. Sie können dann wahrscheinlich EnumProcessModules() und GetModuleInformation() verwenden, um das Modul zu finden, in das die Ausnahmeadresse fällt, und dann GetModuleFileNameEx() verwenden, um den Dateinamen dieses Moduls abzurufen.

+0

Aus irgendeinem Grund, obwohl ich sah, dass ich Zugang zu der Adresse habe ich nicht daran gedacht, diese Anrufe zu verwenden - aus irgendeinem Grund dachte ich, dass irgendwo Informationen versteckt waren, aber ich denke, das würde funktionieren und ist möglicherweise was anderer Code ist unter die Decke tun. – Tim

Verwandte Themen