内存转储未在C ++发布模式下写入

时间:2012-12-19 15:55:45

标签: c++ exception-handling crash-dumps

我一直在使用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来自上述网站。

1 个答案:

答案 0 :(得分:0)

我相信你错过了这一步:

  

要调用API,您需要通过使用SetUnhandledExceptionFilter API设置未处理的异常处理程序来捕获崩溃。这允许在应用程序中发生未处理的异常的任何时候调用过滤器函数。在某些未处理的异常中,例如双栈故障,操作系统将立即终止应用程序而不调用过滤器或JIT调试器

无论如何,我个人更喜欢在这种情况下使用WinDbg。只需使用它连接到远程进程并获得该转储。