你可能认为这是个愚蠢的问题,但我很好奇如何通过APPCRASH错误(也称为“不发送”错误)终止我的Delphi应用程序。
提前感谢。
提前感谢。
您可以通过在System中设置全局变量JITEnable来启用此功能。如果将其设置为1,则所有外部异常(如访问冲突,非法指令和任何非Delphi异常)都会触发所需的反应。如果将其设置为2,则任何异常都会触发该行为。无论哪种情况,这只会在您不调试应用程序时发生。调试器总是会第一时间获取并通知您即将发生的问题。以下是一个简单的示例:
{$APPTYPE CONSOLE}
uses
SysUtils;
begin
try
JITEnable := 2;
raise Exception.Create('Error Message');
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
不要使用任何解决异常处理的替代路径,而是直接避免使用它们:
function Crash(Arg: Integer): Integer; stdcall;
begin
Result := PInteger(nil)^;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
TID: Cardinal;
begin
CloseHandle(CreateThread(nil, 0, @Crash, nil, 0, TID));
end;
Crash
在新的线程中执行。这个线程没有任何异常处理程序。在这样的线程中出现的任何异常都会对应用程序造成致命影响。