除了纯异常处理之外,madExcept还做一件事(if you want it to),即检查主线程是否被冻结。有时您的程序不再响应,尽管没有发生异常。例如,如果您的主线程在无限循环中运行,或者如果多个线程的同步中存在错误,从而导致死锁,则可能会发生这种情况。这样的错误可能很难找到,因为您的程序只是冻结了,没有显示异常。但是使用madExcept,情况不再是那么无望:如果您的主线程在指定的时间内没有对消息做出React,那么madExcept将在主线程的上下文中引发一个异常。在生成的错误报告中,您可以看到主线程到底在做什么,以及当时所有其他线程都在做什么。这应该会对查找无限循环和死锁错误有很大帮助。
2条答案
按热度按时间wpx232ag1#
我推荐madExcept:它是免费供个人使用,但不能用于商业用途。它具有很强的可配置性,允许用户发送错误报告。
来自madshi > Help > madExcept:
普通客户并不是真的想阅读MadExcept的详细错误报告。他只是想将错误报告发送给程序员,希望这将导致更正后的新版本。因此,在默认的settings madExcept框中,不显示任何异常信息,甚至不显示异常消息本身。客户可以只通过邮件发送错误报告,也可以继续、重新启动或关闭应用程序。
这里值得一提的是:MadExcept的异常框不使用任何VCL东西,而是构建在纯Win32API调用之上。只用Win32API设计一个带有位图按钮等的漂亮框并不有趣,但在这种情况下,这是绝对必要的。VCL不是线程安全的,但我们的异常框必须能够出现在每个线程的上下文中-因此它必须是线程安全的,因此它不能使用VCL。
除了纯异常处理之外,madExcept还做一件事(if you want it to),即检查主线程是否被冻结。有时您的程序不再响应,尽管没有发生异常。例如,如果您的主线程在无限循环中运行,或者如果多个线程的同步中存在错误,从而导致死锁,则可能会发生这种情况。这样的错误可能很难找到,因为您的程序只是冻结了,没有显示异常。但是使用madExcept,情况不再是那么无望:如果您的主线程在指定的时间内没有对消息做出React,那么madExcept将在主线程的上下文中引发一个异常。在生成的错误报告中,您可以看到主线程到底在做什么,以及当时所有其他线程都在做什么。这应该会对查找无限循环和死锁错误有很大帮助。
我和Madshi没有关系。
mefy6pfw2#
不,没有。没有使用普通的Delphi。Delphi没有C/C++所具有的
__FILE__
或__LINE__
宏。您可以使用附加异常处理程序(如EurekaLog)在报告中获取此类信息。