如何在Delphi应用程序中调用APPCRASH事件?

时间:2011-03-03 20:29:14

标签: delphi

您可能会将此视为一个愚蠢的问题,但我很好奇如何使用APPCRASH错误终止我的delphi制作的应用程序。 (也称为“不发送”错误!!)

Thnx提前

2 个答案:

答案 0 :(得分:12)

您可以通过在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.

答案 1 :(得分:3)

而不是异常处理的变通路径 - 您可以不使用任何:

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在新线程中执行。此主题没有 ANY 异常处理程序。这种线程中的任何异常对于应用程序都是致命的。