我有一个运行多个线程的应用程序。我使用MadExcept来捕获错误并进行调试。致命应用程序错误未被MadExcept捕获
问题是,有时在运行2-3小时后,Windows会显示一个关闭程序对话框。为什么MadExcept不处理这个错误?
我有一个运行多个线程的应用程序。我使用MadExcept来捕获错误并进行调试。致命应用程序错误未被MadExcept捕获
问题是,有时在运行2-3小时后,Windows会显示一个关闭程序对话框。为什么MadExcept不处理这个错误?
线程是一种特殊情况。如果线程中有异常,它将不会被全局处理程序处理,并且通常会终止您的应用程序。 madExcept的解决方案很简单。赶上例外情况,并告诉MadExcept。它会以通常的方式登录,而且你不会杀死你的线程。
uses
{$IFDEF MadExcept}
madExcept,
{$ENDIF}
procedure TMyThread.Execute;
begin
try
SetName;
// do your stuff
except
on errInfo : Exception do
begin
{$IFDEF MadExcept}
HandleException(etNormal, errInfo);
{$ENDIF}
end;
end;
end;
我还会做的就是让线程在启动时将“RunningOK”属性设置为true,并且异常将其设置为False。这样,我的控制代码就可以看到出错的地方,并且适当地处理它(重新启动它或报告错误等)
如果错误发生在Delphi的异常逻辑之外,并且在MadExcept可以捕获的事件之外, MadExcept没有什么可以做的。但是,您没有提供关于实际错误的信息(“关闭程序对话框”不起作用)。如果它是我认为的关闭对话框**可能是(但我不确定,因为你没有说出Windows的版本),有一种方法可以查看错误报告和堆栈跟踪,以便查看什么错误实际发生在哪里;虽然我从这里看不到它,所以我不能提供更多的帮助。 :) – 2012-03-23 12:28:52
我正在使用Windows 7没有提供更多的信息提供只是:“程序遇到了错误和Windows ...” – opc0de 2012-03-23 12:32:54
该对话框上有链接查看错误报告,其中显示路径和名称的文本文件,如果您允许它发送错误报告,它将发送给MS。该文本文件内部是调用堆栈和其他信息(例外代码,注册内容,指令指针信息等),可帮助找出问题。 – 2012-03-23 12:36:18