Ich versuche, Absturzbericht in C++ Qt auf Windows mit MingW zu schreiben. Ich nahm Bezug von https://spin.atomicobject.com/2013/01/13/exceptions-stack-traces-c/ , aber mein Code kompiliert nicht und gibt folgende Fehler - Ich verwende diesen Code auf Windows 10 mit Qt 5.4.0 mingw. Ich bekomme wenige Fehler während der Erstellung dieses Codes. Fehler: undefiniert Bezugnahme auf [email protected]′ error: undefined reference to
_imp__SymGetModuleBase @ 8 ' Fehler: undefiniert Bezug auf [email protected]′ error: undefined reference to
_imp__StackWalk @ 36' Fehler: undefiniert Bezugnahme auf `_imp__SymCleanup @ 4 'Absturzbericht in C++ Mingw auf Windows
Diese Fehler sind aus folgenden Code.
void windows_print_stacktrace(CONTEXT* context)
{
SymInitialize(GetCurrentProcess(), 0, true);
STACKFRAME frame = { 0 };
/* setup initial stack frame */
frame.AddrPC.Offset = context->Eip;
frame.AddrPC.Mode = AddrModeFlat;
frame.AddrStack.Offset = context->Esp;
frame.AddrStack.Mode = AddrModeFlat;
frame.AddrFrame.Offset = context->Ebp;
frame.AddrFrame.Mode = AddrModeFlat;
while (StackWalk(IMAGE_FILE_MACHINE_I386 ,
GetCurrentProcess(),
GetCurrentThread(),
&frame,
context,
0,
SymFunctionTableAccess,
SymGetModuleBase,
0))
{
addr2line(icky_global_program_name, (void*)frame.AddrPC.Offset);
}
SymCleanup(GetCurrentProcess());
}
Bildhlp.dll ist verantwortlich für die oben genannten Funktionen. Kann mir jemand sagen, wie man diese Art von Fehlern beheben kann.
Vielen Dank im Voraus.
Ich habe es getan. aber immer noch dieselben Fehler. Gibt es eine Möglichkeit zu überprüfen, welche Version der DLL es benötigt. weil ich arbeite auf Windows 10 64-Bit-Maschine und bereits System hat viele imagehlp.dll in vielen Ordnern wie system32. – Abhi
ImageHlp hat viele Versionen durchlaufen und wird viel mit anderen Tools neu verteilt. Jedoch ist die spezifische DLL (noch) nicht Ihr Problem, da es die Importbibliothek (.lib) nicht verbindet. Es sieht aus, als ob Sie für 32bit x86 kompilieren, aber möglicherweise die Importbibliothek für die 64-Bit-DLL gewählt haben - ich habe als Geschwisterverzeichnisse "\ x32 \ ImageHlp.Lib" und "\ x64 \ ImageHlp.Lib". –