Windows上的C ++ Mingw崩溃报告

时间:2016-10-20 05:48:59

标签: c++ c windows qt mingw

我正在尝试用MingW在Windows上的c ++ Qt中编写崩溃报告。我参考了https://spin.atomicobject.com/2013/01/13/exceptions-stack-traces-c/ 但我的代码没有编译并给出以下错误 - 我使用Qt 5.4.0 mingw在Windows 10上使用此代码。编译此代码时,我收到的错误很少。 错误:对_imp__SymInitialize@12′ error: undefined reference to _ imp__SymGetModuleBase @ 8'的未定义引用 错误:对_imp__SymFunctionTableAccess@8′ error: undefined reference to _ imp__StackWalk @ 36'的未定义引用 错误:未定义引用`_imp__SymCleanup @ 4'

这些错误来自以下代码。

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() );
}

imagehlp.dll负责上述功能。 有人可以告诉我如何解决这类错误。

提前致谢。

2 个答案:

答案 0 :(得分:3)

看起来好像没有将imagehlp.lib导入库添加到您的构建中?即将其添加到其他平台库的列表中。如果您必须为<imagehlp.h>添加包含路径,那么您可能会在兄弟目录中找到imagehlp.lib

答案 1 :(得分:0)

Mingw64具有直接链接到dll的能力,它比msvc导入库慢一点但不易出错 - 这似乎与最近的mingw64不相容。确保dll被列为目标(或者-L -limagehlp,如果可行的话)之后依赖于它的所有对象/来源。