2008-11-13 86 views
17

Delphi 2009中的Exception类获得了许多新功能。其中一些涉及得到一个堆栈跟踪:在Delphi 2009中挂接Stacktrace

  • 财产堆栈跟踪:阅读的getStackTrace;
  • property StackInfo:指针read FStackInfo;
  • class var GetExceptionStackInfoProc:function(P:PExceptionRecord):指针;
  • 类变种 GetStackInfoStringProc:功能(信息:指针):;
  • class var CleanUpStackInfoProc:procedure(Info:Pointer);

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

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

回答

8

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

+1

你是100%正确的。 这些新功能适用于第三方异常挂钩框架。现在,有一种记录的方式来做一些工作,而不是使用黑客和钩子。 另外,非常有价值的FStackInfo字段允许将异常与来自异常跟踪引擎(最终!)的其他信息相关联。 – Alex 2009-04-25 11:26:25

2

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

2

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

2

你会被建议看看MadExcept。它不仅提供了对任何未处理的异常(屏幕截图,电子邮件等)的出色处理,而且还提供了一套很好的可调用例程,以便将您可以使用的堆栈跟踪交给几乎任何地方。 Bri