【问题标题】:How Get Full Call Stack in Delphi Server Application如何在 Delphi Server 应用程序中获取完整的调用堆栈
【发布时间】:2012-05-12 15:28:48
【问题描述】:

我有一个多层软件,它是两个应用程序(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 应用程序有效。

【问题讨论】:

    标签: delphi debugging exception-handling callstack datasnap


    【解决方案1】:

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

    【讨论】:

    • +1 但“有效”并不完全正确,更像是“非常有效”(:
    【解决方案2】:

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

    调试信息被高度压缩(比 zip 或任何其他格式更好),可以选择进入 exe。

    开源,适用于 Delphi 5 到 XE2。

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

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

    【讨论】:

    • 哇阿诺!你的东西会越来越好!
    • 如果你推荐它作为解决方案,最好有最少的代码示例,如何添加/激活这样的异常拦截器等。对于专门的库,通常将单元添加到项目,但在这种情况下我猜不是。 36Mb 文件压缩 MAP 文件失败(一些固定大小的内部缓冲区太小,应该从文件大小计算)。
    • @AndreiGalatyn .map 文件巨大的问题昨天已修复。您可以在github.com/synopse/mORMot/tree/master/SQLite3/Samples/… 找到样品
    • @Arnaud 似乎夜间构建 2015-02-21_170025 仍然不包含修复程序,我明天会检查它。但乍一看,它看起来很有趣(只有 3 个带有完整源代码的单元,它们可以满足我的所有需求,甚至更多)。将尝试在真实项目上进行测试。谢谢!
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      另外,关于你的问题,这也可以帮助你

      Display the call stack in a Delphi Win32 application

      【讨论】:

        猜你喜欢
        • 2011-03-01
        • 2012-06-29
        • 1970-01-01
        • 2014-08-13
        • 2010-09-11
        • 2018-02-19
        • 2013-01-20
        • 1970-01-01
        • 2023-03-30
        相关资源
        最近更新 更多