【发布时间】:2023-03-22 17:35:02
【问题描述】:
我一直在使用 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 来自上述网站。
【问题讨论】:
-
在您链接的页面中:只提到了 Windows XP 和 2000,并且转储程序似乎只适用于例外情况。这就引出了一个问题:你确定它应该工作吗?
-
不,我不知道,但它绝对适用于调试。
-
我不是 VC++ 方面的专家,但很可能
Debug模式包含额外的检查(例如边界检查),而Release模式中不包含这些检查(出于性能原因),并且您的代码可能依赖于这样的测试。 -
我会使用这个
MiniDumper并将它的皮肤保留到仍然会创建转储的最小行。然后看看这是否适用于发布模式。如果它在 Debug 中有效,但在 Release 中无效,您可以尝试将 Debug 慢慢转为 Release:启用优化、设置 NDEBUG 等。您也可以尝试调试 Release。如果一切都失败了,请在此处发布蒙皮代码,以便我们查看。
标签: c++ exception-handling crash-dumps