时间:2010-07-23 13:31:38

标签: c++ winapi mingw

3 个答案:

答案 0 :(得分:7)

在以下链接中查看Edd先生的堆栈跟踪库。它将产生一个很好的堆栈框架列表,并具有支持MinGW的特定代码。

http://www.mr-edd.co.uk/code/stack_trace

他的库使用dbghelp.dll,因此您可能会遇到一些尝试编译它的问题。据我所知,MinGW不包含此DLL的导入库(请参阅旧功能请求here)。但是,我成功了,自己创建了一个导入库。您可以使用Wine项目中的.def文件(检查上一个链接的附加文件)并运行MingW实用程序dlltool来执行相同操作:

dlltool -k -d dbghelp.def -l dbghelp.a

然后,您可以在项目中包含生成的dbghelp.a文件。您可能不希望在发布版本中依赖于dbghelp.dll,因为DLL本身肯定不可再发行。

答案 1 :(得分:3)

答案 2 :(得分:1)

我在MingGW中使用Edd's dbg库获得了堆栈跟踪,这是他的最小stack_trace库的继承者:

使用msys2,这可以为您提供堆栈跟踪:

$ pacman -S mingw-w64-x86_64-edd-dbg
// main.cpp
#include <dbg/frames.hpp>
#include <dbg/symbols.hpp>
#include <iostream>

int main()
{
  dbg::symdb db;
  dbg::call_stack<64> traceback;
  traceback.collect(0);
  traceback.log(db, std::cout);
  return 0;
}
$ g++ -ggdb main.cpp -ldbg
$ ./a.exe
0x0000000000402ee9: dbg::call_stack<64u>::collect(unsigned int) in C:\msys64\home\phil\stacktrace-example\a.exe
0x00000000004015f2: main in C:\msys64\home\phil\stacktrace-example\a.exe
0x00000000004013f8: __tmainCRTStartup in C:\msys64\home\phil\stacktrace-example\a.exe
0x000000000040151b: mainCRTStartup in C:\msys64\home\phil\stacktrace-example\a.exe
0x00007ffbb0838102: BaseThreadInitThunk in C:\WINDOWS\system32\KERNEL32.DLL
0x00007ffbb27cc5b4: RtlUserThreadStart in C:\WINDOWS\SYSTEM32\ntdll.dll

有关dbg的更多信息,请参见Wiki。代码可在此处获取:https://bitbucket.org/edd/dbg/src