【问题标题】:How does Windows detect if a program is "stopped working"?Windows 如何检测程序是否“停止工作”?
【发布时间】:2016-01-28 06:13:25
【问题描述】:

当我点击 X 按钮关闭一个程序(比如说它是 MYAPP)时,弹出一个对话框说:

MYAPP 已停止工作

Windows 可以在线查看问题的解决方案。”

但实际上应用程序已经退出了。

错误信息:

    Problem signature:
      Problem Event Name:   APPCRASH
      Application Name: MYAPP.EXE
      Application Version:  1.0.0.0
      Application Timestamp:    56a8dfa8
      Fault Module Name:    MSVCP90D.dll
      Fault Module Version: 9.0.30729.6161
      Fault Module Timestamp:   4dace5bf
      Exception Code:   c0000005
      Exception Offset: 00007b3f
      OS Version:   6.3.9600.2.0.0.272.7
      Locale ID:    3081

Windows 如何检测程序是否“停止工作”?是否表明应用程序抛出异常或死锁?

【问题讨论】:

  • 好吧,在这种特殊情况下,原因很简单:异常 0xc0000005,这是内存访问冲突。
  • @HarryJohnston 有没有办法让程序在内存访问冲突点中断并启动 Visual Studio?
  • 如果安装了 Visual Studio,Windows 通常会提供调试程序。但如果由于某种原因这不起作用,您可以在 Visual Studio 调试器中显式运行它。

标签: windows crash windows-error-reporting


【解决方案1】:

Windows 错误报告 (WER) 将捕获未处理的异常。它不会陷入僵局。当程序“停止工作”时弹出的对话框是 WER 故障转储(或者它与 MS 服务器通信以查看它是否要进行故障转储等)。

有几种方法可以调试崩溃的程序,这些方法经过验证(虽然很费力)。其中包括:

  • 使用 GFlags 启动 Visual Studio 或 WinDbg
  • 在程序中包含代码以启动调试器

在这种情况下,使用 WER,您可以打开本地故障转储,然后,只要您有符号数据库 (pdb) 文件,就可以从本地故障转储进行调试。您可以在 Collecting User-Mode Dumps 阅读更多关于本地故障转储的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    相关资源
    最近更新 更多