详细问题:

我们正在尝试在Delphi应用程序中使用MadExcept捕获堆栈跟踪(bugreport.txt),在该应用程序中,线程由于致命错误而使应用程序崩溃。但是,在应用程序崩溃后,MadExcept不会输出任何堆栈跟踪信息。有什么想法吗?

我们的代码:

procedure TMainForm.WSServerExecute(AContext: TIdContext);
begin
  try
    HTMLExecute(AContext);
  except
    on E: Exception do
    begin
      if not(E is EIdException) then
      begin
        LogData.AddError('HTMLExecute error: ' + E.Message);
        madExcept.HandleException;
      end;
      raise;
    end;
  end;
end;


当客户端将Websocket连接返回到服务器时,将调用此过程。这是Indy TCPServer组件产生的线程。 HTMLExecute函数是在客户端和服务器之间读取和写入数据包的功能。我将其包装在try..except块中以捕获任何异常。 LogData行将错误记录到错误日志,而madExcept行应创建bugreport.txt文件。 Raise行将异常传递回Indy,以便它知道发生了致命错误,并将中止线程。

最佳答案

madExcept不处理异常的原因是因为您已经使用on E:Exception do自己处理了它。只需给madExcept.HandleExcept异常处理即可:

madExcept.HandleException(etNormal, E);

10-05 22:40