如何在运行时没有调试器的情况下显示异常发生的行号?

Ton*_*ich 4 delphi delphi-xe

我在运行时发生异常,这是不可重现的,因此我无法在IDE /调试器中调试它.我想知道代码在这里发生了什么,所以我用try/except语句包围了代码,插入一个'raise exception'语句进行测试并显示这样的stacktrace,看它是否有效:

   on e: exception do begin
          showmessage(e.StackTrace);
    end;
Run Code Online (Sandbox Code Playgroud)

但是显示的消息为空.它为什么是空的?还有另一种方法可以知道发生异常的位置吗?使用Delphi XE.

Ken*_*ite 10

Exception.StackTrace文档表明缺省实现返回一个空字符串,并且,为了使用功能,你需要提供一个GetStackInfoStringProc程序.它还建议使用第三方提供商的一些实现(包括免费和商业),而不是编写自己的实现.

这是该文档的(简要)摘录 - 访问相关链接的文档页面:

默认情况下,StackTrace始终为空字符串.如果希望StackTrace包含实际值,则必须为GetStackInfoStringProc分配一个可以从堆栈信息生成字符串的过程.

使用Exception.StackTrace

为了使用StackTrace属性获取异常的堆栈跟踪,您必须使用(或实现)堆栈跟踪提供程序.有许多第三方解决方案,包括商业和免费解决方案.

一些堆栈跟踪提供程序是:

有关如何使用上述某些第三方堆栈跟踪提供程序的更多信息,请参阅以下博客文章: