获取Delphi异常行

olmpazwi  于 2022-09-21  发布在  其他
关注(0)|答案(2)|浏览(163)

我使用的是Delphi 11。考虑以下示例代码:

try
raise exception.create('Test');
except
on e : exception do
begin
showmessage(e.message+' on form X, line Y');
end;
end;

有没有办法得到发生异常的X和Y线的确切形式?

wpx232ag

wpx232ag1#

我推荐madExcept:它是免费供个人使用,但不能用于商业用途。它具有很强的可配置性,允许用户发送错误报告。

来自madshi > Help > madExcept
普通客户并不是真的想阅读MadExcept的详细错误报告。他只是想将错误报告发送给程序员,希望这将导致更正后的新版本。因此,在默认的settings madExcept框中,不显示任何异常信息,甚至不显示异常消息本身。客户可以只通过邮件发送错误报告,也可以继续、重新启动或关闭应用程序。

这里值得一提的是:MadExcept的异常框不使用任何VCL东西,而是构建在纯Win32API调用之上。只用Win32API设计一个带有位图按钮等的漂亮框并不有趣,但在这种情况下,这是绝对必要的。VCL不是线程安全的,但我们的异常框必须能够出现在每个线程的上下文中-因此它必须是线程安全的,因此它不能使用VCL。

除了纯异常处理之外,madExcept还做一件事(if you want it to),即检查主线程是否被冻结。有时您的程序不再响应,尽管没有发生异常。例如,如果您的主线程在无限循环中运行,或者如果多个线程的同步中存在错误,从而导致死锁,则可能会发生这种情况。这样的错误可能很难找到,因为您的程序只是冻结了,没有显示异常。但是使用madExcept,情况不再是那么无望:如果您的主线程在指定的时间内没有对消息做出React,那么madExcept将在主线程的上下文中引发一个异常。在生成的错误报告中,您可以看到主线程到底在做什么,以及当时所有其他线程都在做什么。这应该会对查找无限循环和死锁错误有很大帮助。

我和Madshi没有关系。

mefy6pfw

mefy6pfw2#

不,没有。没有使用普通的Delphi。Delphi没有C/C++所具有的__FILE____LINE__宏。

您可以使用附加异常处理程序(如EurekaLog)在报告中获取此类信息。

相关问题