delphi - MadExcept for delphi 在应用程序崩溃后不打印堆栈跟踪

标签 delphi madexcept

详细问题:

我们正在尝试在 Delphi 应用程序中使用 MadExcept 捕获堆栈跟踪 (bugreport.txt),其中线程因 fatal error 而导致应用程序崩溃。但 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 block 中以捕获任何异常。 LogData 行将错误记录到错误日志中,madExcept 行应该创建 bugreport.txt 文件。 Raise 行将异常传递回 Indy,以便它知道发生了 fatal error 并将中止线程。

最佳答案

madExcept 不处理异常的原因是因为您已经使用 on E:Exception do 捕获了它并自行处理它。只需给 madExcept.HandleExcept 异常来处理它:

madExcept.HandleException(etNormal, E);

关于delphi - MadExcept for delphi 在应用程序崩溃后不打印堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18436853/

相关文章:

delphi - 如何以及在何处将数据库驱动程序安装到 IDE 中?

delphi - Delphi 中图标的线程加载

delphi - 为什么在VCL控件上调用TRttiContext.GetType时会重复某些属性?

delphi - 我如何知道用户将某些东西放到了 TcxGrid 的哪一行?

delphi - 无形式应用程序中的 TFDGUIxWaitCursor

delphi - MadExcept异常过滤器

delphi - 将调用堆栈记录到文件中

delphi - MadExcept 在 try finally 时触发