Win32-API-Stack mit MinGW / MSYS gehen?

8

Ich muss einen Stack-Trace zu unserer win32-API-Plattform-Unterstützung entwickeln, um jede Ausnahme mit dem Verhalten eines JAVA-Stack-Trace abzufangen. Tatsächlich haben wir eine voll funktionsfähige Implementierung für Linux-Plattformen erhalten.

Zuerst habe ich versucht, einen Stackwalk mithilfe der Win32 CaptureStackBackTrace-API zu implementieren Mechanismus. Diese Methode ist jedoch nicht in den Winbase-Header von mingw integriert (mit MSYS / MinGW 5.1.x) ...

Also habe ich mich entschieden, den dbgleader-Mechanismus zu verwenden, der den Anweisungen dieses Links folgt: Ссылка

Aber ich scheitere wieder und stoße auf Linker-Fehler, die ich nicht lösen konnte. Ich denke, MinGW konnte die dbgheader-Bibliothek nicht auflösen ....

DrMinGW ist keine Option für mich, während es ein JIT Debugger ist, muss ich einen Stack-Trace-Mechanismus implementieren, für jede Ausnahme, die zur Laufzeit mit einer anpassbaren Protokolldatei-Tracefähigkeit auftritt, wie wir es von JAVA kennen ...

Hat jemand MSYS / MinGW Runable mit der Win32-API in Handshake? Ich werde den Compiler nicht zum hässlichen MVC-Compiler ändern, anstatt MSYS / MinGW ... zu verwenden.

Danke für jeden Hinweis. Mit freundlichen Grüßen,

Christ

    
Hellhound 23.07.2010, 13:31
quelle

3 Antworten

7

Überprüfen Sie die Stack-Trace-Bibliothek von Mr. Edd unter folgendem Link. Es wird eine schöne Stapelrahmenliste erzeugen und einen spezifischen Code zur Unterstützung von MinGW haben.

Ссылка

Seine Bibliothek verwendet jedoch dbghelp.dll, so dass Sie möglicherweise Probleme beim Kompilieren bekommen. Soweit ich weiß, enthält MinGW keine Import-Bibliothek für diese DLL (siehe eine alte Funktion Anfrage hier ). Ich hatte jedoch Erfolg, indem ich selbst eine Importbibliothek erstellte. Sie können dasselbe tun, indem Sie einfach eine .def-Datei aus dem Wine-Projekt verwenden (prüfen Sie die angehängten Dateien des vorherigen Links) und führen Sie das MingW-Dienstprogramm dlltool:

aus %Vor%

Sie können die resultierende Datei dbghelp.a in Ihr Projekt einfügen. Sie werden wahrscheinlich keine Abhängigkeiten gegenüber dbghelp.dll in Ihren Release-Builds haben, da die DLL selbst nicht wiederverteilbar ist.

    
José Luis Cebrián 23.08.2011, 23:10
quelle
3

Hier ist eine Methode, um den Aufruf-Stack mit der Win32-API zu gehen, die Sie von MinGW aufrufen können.

Ссылка

    
jcoffland 23.07.2010 23:33
quelle
1

Ich habe Stack-Spuren, die in MingGW funktionieren, mit Edds dbg -Bibliothek, die ein Nachfolger seines Minimals ist stack_trace Bibliothek:

Mit msys2 sollte dies einen Stack-Trace erhalten:

%Vor% %Vor% %Vor%

Weitere Informationen zu dbg finden Sie im Wiki . Der Code ist hier verfügbar: Ссылка

    
Philipp Claßen 01.09.2016 03:01
quelle

Tags und Links