【发布时间】:2010-05-19 00:25:16
【问题描述】:
有什么方法可以关闭 Delphi 应用程序运行时显示的异常消息? 我认为必须有一个指令来关闭异常消息,但我不记得了。
【问题讨论】:
-
您的意思是在发布构建期间?尝试原生操作系统异常?
-
你为什么要这样做?
-
如果您提供了想要这样做的合理理由,这个问题可能会得到更多的支持。否则,只需关闭显示器即可。
有什么方法可以关闭 Delphi 应用程序运行时显示的异常消息? 我认为必须有一个指令来关闭异常消息,但我不记得了。
【问题讨论】:
大多数异常消息都可以通过处理TApplication.OnException 事件来抑制。如果没有分配给该事件的处理程序,则应用程序对象仅显示异常消息。如果需要,欢迎您在处理程序中调用 TApplication.ShowException 处理某些异常。
在 VCL 消息循环中运行时发生的异常会触发该事件。其他地方发生的异常会终止您的程序或当前线程。此外,该事件仅针对来自Exception 的异常触发;来自其他类的异常直接传递给SysUtils.ShowException。
无论您是否显示消息,一旦发生您尚未处理的异常,您的程序仍处于不确定状态。仅仅压制消息就像扫地毯下的灰尘一样。更好的做法是使用异常记录工具,如 MadExcept、EurekaLog 或 JclDebug,它记录有关异常的信息,并为您的客户提供将报告发回给您的选项,以便您可以重现错误的条件并修复它。
【讨论】:
我使用 IDE 将其关闭:
在 Delphi 2007 中,单击工具 / 选项,然后向下转到调试器选项 / CodeGear 调试器 / 本机操作系统异常。选择“运行未处理”。调试器不会因异常而停止,但其行为与从 exe 运行相同。异常将照此处理。
对于指令,我不知道有哪一个可以完全做到以上,但也许这会有所帮助:
http://www.delphibasics.co.uk/ByType.asp?Type=Compiler%20Directive
【讨论】:
您是否正在运行 OpenGL?我没有尝试过使用更新的 Codegear/OpenGL 构建,但曾经存在一个问题,即 OpenGL 没有禁用 FPU 异常,但 IDE 期望这些默认情况下会被关闭(就像 Microsoft 库一样)所以 IDE会报告 FPU 异常ad-nauseam,尽管这些并不重要。
解决方案是显式关闭 FPU 异常,您可以使用语句在代码中执行此操作。
Set8087CW($133F);
可能还有其他库也会导致问题。
【讨论】: