我一直在使用http://www.codeproject.com/Articles/1934/Post-Mortem-Debugging-Your-Application-with-Minidu从我的应用程序中获取转储文件,该文件总是在另一个系统上崩溃。
所以我所拥有的是Header文件和CPP,并且在调试模式下,但没有附加调试器,它询问我是否要创建dmp文件,然后崩溃,但在发布模式下,它只是崩溃。
基本上我一直在使用的代码是
void IndexFault(int n)
{
unsigned char* smallArray = new unsigned char[4];
printf((const char*)smallArray[n]);
}
MiniDumper* mDump = new MiniDumper("Dumpfile");
int main()
{
IndexFault(4);
return 0;
}
同样,如果执行从Debug模式创建的exe,我得到的文件就好了,发布后我什么都没得到。在两种情况下都使用64位代码。一旦这个工作正常,我会将它应用到我的真实代码中,但截至目前,我无法弄清楚发生了什么。我使用的Minidumpwriter来自上述网站。
答案 0 :(得分:0)
我相信你错过了这一步:
要调用API,您需要通过使用
SetUnhandledExceptionFilter
API设置未处理的异常处理程序来捕获崩溃。这允许在应用程序中发生未处理的异常的任何时候调用过滤器函数。在某些未处理的异常中,例如双栈故障,操作系统将立即终止应用程序而不调用过滤器或JIT调试器。
无论如何,我个人更喜欢在这种情况下使用WinDbg。只需使用它连接到远程进程并获得该转储。