2

我正在使用 Madexcept 工具记录异常,但我无法定期记录调用堆栈。任何人都可以建议我如何记录调用堆栈。

4

2 回答 2

4

要在没有整个报告的情况下仅获取跟踪(这会减慢速度),您可以调用 MadStackTrace。当您想知道您的程序如何进入各种过程/功能/方法时,它非常方便,特别是当它可能以多种方式发生时,或者您正在为性能问题而摸不着头脑。

你在你的使用中需要这个:

uses
  MadStackTrace;

// Then to use the thing:

procedure foo;
begin
  writeln('How I got to FOO:' + MadStackTrace.StackTrace);
end;

http://help.madshi.net/madStackTraceUnit.htm

于 2014-03-04T13:51:41.613 回答
1

对您的问题的天真回答是,您可以在专用线程中执行以下操作:

var
  exc: IMEException;
....
exc := madExcept.NewException;
Logger.Log(exc.BugReport);

请注意,这会记录整个错误报告。如果您想记录更少的信息,您可以使用正常的 madExcept 技术从IMEException参考中提取该信息。

另请注意,收集所有这些信息需要花费大量时间,并且会干扰程序的执行。在我看来,您真正想要的是探查器或一些跟踪记录。我不认为 madExcept 实际上是解决您潜在问题的方法。

于 2014-03-04T08:10:09.753 回答