【问题标题】:Hooking a Stacktrace in Delphi 2009在 Delphi 2009 中挂钩 Stacktrace
【发布时间】:2008-11-13 09:30:13
【问题描述】:

Delphi 2009 中的 Exception 类获得了许多新功能。其中一些与获取堆栈跟踪有关:

  • 属性 StackTrace:字符串 读取 GetStackTrace;
  • 属性 StackInfo:指针读取 FStackInfo;
  • class var GetExceptionStackInfoProc: function (P: PExceptionRecord): Pointer;
  • class var GetStackInfoStringProc: function (Info: Pointer): string;
  • class var CleanUpStackInfoProc:过程(信息:指针);

有没有人使用这些来获取堆栈跟踪?是的,我知道还有其他方法可以获取堆栈跟踪,但如果 Exception 类本身支持它,我宁愿利用它。

更新:有兴趣 blog post about this。涵盖了很多深度。

【问题讨论】:

    标签: delphi exception delphi-2009 stack-trace


    【解决方案1】:

    对我来说,这看起来像是一个框架,您可以在其中插入自己的堆栈跟踪。我想这可能会在带有 JCLDebug 的 IDE 内部使用。也许它旨在让用户能够提供 madExcept 或其他实现。

    【讨论】:

    • 你是 100% 正确的。这些新功能适用于第三方异常挂钩框架。现在,有一种记录在案的方式来做一些工作,而不是使用 hacks 和 hooking。另外,非常有价值的 FStackInfo 字段允许将异常与其他信息相关联,这些信息来自异常跟踪引擎(终于!)。
    【解决方案2】:

    不,我还没有使用它们(目前使用 madExcept,并且还使用 JclDebug 进行了一些实验) - 但感谢您的提示!

    【讨论】:

      【解决方案3】:

      TOndrej 是正确的。添加到 Exception 类的新功能是供第三方将他们自己的堆栈跟踪代码挂接到 RTL 中。 Exception 类的默认实现不产生自己的堆栈跟踪。

      【讨论】:

        【解决方案4】:

        建议您查看 MadExcept。它不仅对任何未处理的异常(屏幕抓取、电子邮件等)提供了出色的处理,而且它具有一组很好的可调用例程,可以将堆栈跟踪返回给您,您几乎可以在任何地方使用它。 布里

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-05-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多