哪些错误/异常会触发Windows错误报告?

时间:2009-10-07 07:58:28

标签: windows delphi exception-handling delphi-2009

在调试器外部运行Delphi应用程序时,大多数发生的异常似乎都会被忽略(如访问冲突)。但有时会出现Windows错误报告对话框(发送或不发送,您可能知道我的意思)。这到底是什么意思?哪些错误会触发此行为?

附加信息:我的应用程序有一个全局异常处理程序,它应该记录所有未处理的异常。因此,没有例外应该使应用程序无法处理。

感谢。

4 个答案:

答案 0 :(得分:3)

在调试器外部运行时,大多数异常都是 not 无声地忽略。它们通常由VCL应用程序中的事件循环捕获,或者在控制台应用程序等中进入主开始/结束.VCL事件循环的默认aciton是显示包含与异常关联的消息的对话框。

如果异常逃脱应用程序,无论是通过到达主开始/结束而不被捕获,还是没有被事件循环捕获,Windows错误报告步骤 - 功能上,它是一个异常处理程序,就像任何其他除了在堆栈的最底层。

答案 1 :(得分:2)

它涵盖了应用程序未处理的异常 - 如果异常在应用程序的主入口点之外传播,则WER将介入。这包括AV,除以零,无效句柄访问等其他内容乐队或“筹码”例外。有时您的代码可以尝试处理这些事情,但如果内存损坏得太严重或者有什么问题,那么您的代码将会死亡。

答案 2 :(得分:2)

如果在Execute方法中未处理的线程中存在异常,通常会出现问题。该程序将被杀死,但行为是不可预测的,似乎取决于许多事情(如其他线程的数量和状态)。通常主窗口立即消失,因此程序不会处理任何进一步的异常,这可能是导致WER捕获它们的原因。

我习惯在Execute中有一个外部异常处理程序,它记录任何未处理的异常并允许线程干净地终止。

答案 3 :(得分:1)

初始化和终结部分中发生的异常将转义全局异常处理程序并触发WER。