3

我一直在使用http://www.codeproject.com/Articles/1934/Post-Mortem-Debugging-Your-Application-with-Minidu从我的应用程序中获取一个转储文件,该文件总是在另一个系统上崩溃。

所以我所拥有的是头文件和 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;
}

同样,如果执行从调试模式创建的 exe,我得到的文件就好了,而发布我什么也得不到。在这两种情况下都是 64 位代码。一旦它起作用,我将把它应用到我的真实代码中,但到目前为止,我无法弄清楚发生了什么。我使用的 Minidumpwriter 来自上述网站。

4

1 回答 1

0

我相信你错过了这一步:

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

无论如何,我个人更喜欢在这种情况下使用 WinDbg。只需将其附加到远程进程并获取该转储即可。

于 2012-12-30T04:23:36.167 回答