我有一个64位MFC应用程序,我在其中使用崩溃报告。该方法基于这篇文章:
http://www.codeproject.com/KB/debug/XCrashReportPt1.aspx?display=Print
所以我在AfxWinMain
周围有一个__try - __except包装框。
去年它似乎运行良好(我的意思是在不同的操作系统上,也有32位和64位应用程序)。
让我们从这个例外中提供代码部分:
void CMyDig::Foo()
{
std::vector<int> v;
int i = v.at(42);
}
当我在对话框的消息处理程序中编写此代码时,例如一个名为Foo的按钮的clickhandler,然后AfxWinMain
中没有捕获异常。
如果我将相同的内容写入全局函数,它会将异常传递给AfxWinMain
。
现在我们有这个奇怪的问题:
在某些计算机上,对话框的情况也会生成崩溃报告(在afxwinmain中输入__except块),但其他计算机没有。我设法在win7 64位上创建崩溃报告,但win8,win8.1和另一个win7 64bit上的相同程序没有报告!
我用vs2010编译,在代码生成选项中,“启用c ++异常”设置为EHsc(去年,当它运行良好时)。
感谢您的任何想法! 阿提拉
答案 0 :(得分:0)
定义SetUnhandledExceptionFilter来创建崩溃报告会更容易。
在这种情况下,您不需要这样的__try / __except块
WndProcs有自己的__try __except块,有些例外由它们自己处理。 但无论如何。我从未遇到过异常过滤器的问题。 我的例程通常会创建一个崩溃转储(minidump)并终止。我一直认为,这些信息绝不足以让我们的技术人员找到问题。