【发布时间】:2015-06-09 10:39:37
【问题描述】:
首先我将描述我所知道的崩溃类型。向下滚动查看实际问题。请注意,我只对 Windows 处理的崩溃感兴趣。特定的应用程序和框架有时有自己的崩溃处理程序(例如 Cygwin、VCL、Java 或 .NET),我不会讨论这些。
华生医生
在 Windows XP 上,大多数未处理的 "Structured Exceptions"(例如访问冲突)会产生 Microsoft 应用程序错误报告对话框(后来改名为“Windows 错误报告”,但可执行文件为 dwwin.exe,我将 call it Dr Watson):
用*(char*)0=0;很容易复制
FatalAppExit
调用 FatalAppExit() 会产生 MessageBox 和 Event Log 条目,但不会产生 Dr Watson:
堆栈溢出
在 Windows XP 上,堆栈溢出会导致进程在没有任何通知的情况下毫不客气地退出。 (我认为这从 Vista 开始就已修复)
可以用main(){main();}转载
我的问题是,是什么原因导致其中之一:
此对话框归csrss.exe 所有,当我看到它时,AcroRd32.exe 进程已经退出。
它还在系统事件日志中写入一个条目(Dr Watson 崩溃不会这样做):
我可以通过调用 MessageBox 来重现对话框和事件日志条目(但显然不是真正的崩溃):
MessageBox(
0,
"The exception unknown software exception (0xc0000409) occurred in the application at location 0x00404def.",
"AcroRd32.exe - Application Error",
MB_ICONSTOP | MB_SERVICE_NOTIFICATION);
我已排除作为服务运行的 Adobe Reader。它是版本 11.0.08。 The crash seems to happen sporadically when a Windows Explorer window with a PDF file selected becomes the active window.
当然,我并不是要您为我排除 Adobe Reader 的故障,只是要如何产生“应用程序错误”/“应用程序弹出”类型的崩溃,最好以编程方式进行,这样我就可以了解发生了什么。
【问题讨论】:
-
仅供参考:
0xC0000409是STATUS_STACK_BUFFER_OVERRUN。您可以尝试将其传递给NtRaiseHardError,但在 Windows 7 上显示的消息非常不同。 (我目前没有要测试的 Windows XP)
标签: crash windows-xp event-log application-error drwatson