如何在Delphi Server应用程序中获取完整的调用堆栈

时间:2012-05-03 05:59:11

标签: delphi debugging exception-handling callstack datasnap

我有一个多层软件,它是两个应用程序(GUI,DataSnap Server)。我的DataSnap服务器应用程序有一些错误导致EAccessViolation在某些时候发生。这样:

Exception EAccessViolation  in module unidac160.bpl at 00010CB1.
Access Violation at 002B77832 in module unidac160.bpl. Read of  address 0000000C

我想获得完整的调用堆栈并将其记录在文件中。我也使用eurekalog,但它仅适用于gui应用程序。

4 个答案:

答案 0 :(得分:9)

EurekaLog对所有应用程序都非常有效。只需对其进行配置,以便将异常记录到文件中,并且根本不显示异常对话框。

答案 1 :(得分:7)

我们的Open-Source logging classes有一个带有完整调用堆栈的异常拦截器,包括源代码行。

调试信息经过高度压缩(优于zip或任何其他格式),可选择进入exe。

开源,适用于Delphi 5到XE2。

在其最新版本中(使用来自the source code repository的版本 - 即当前为1.16),它还能够记录库中的异常(即在.dll或.bpl中),因为您的请求明确声明。

还有其他功能,例如客户端分析,可以帮助您的客户支持和应用程序增强,来自真实数据(不仅仅是在测试平台中)。

答案 2 :(得分:4)

您还可以使用MadExcept获取应用程序的堆栈。您有类似的问题madExcept, getting top of current stack

此外,与您的问题相关,这也可以帮助您

Display the call stack in a Delphi Win32 application

答案 3 :(得分:0)

我之前一直在使用MemCheck来渲染调用堆栈,但我不确定它是否仍适用于最新的Delphi版本。