【问题标题】:How to disable all exception raising in Delphi?如何禁用 Delphi 中的所有异常引发?
【发布时间】:2012-06-13 17:53:17
【问题描述】:

有没有办法在发生异常或错误时禁用所有对话框(如访问冲突、indy 套接字错误、超时等)?它们有时会在我的程序中抛出,但这些错误无论如何都不是致命的,可以忽略,只是对话框令人不安。我使用的是 Delphi 7。

【问题讨论】:

  • 你可以捕获所有异常,但这是完全错误的,编写这样的代码完全缺乏专业精神。访问冲突总是有问题的,应该处理。
  • 你没有想到修复程序中的错误可能会更好吗?可以忽略访问违规的建议是完全奇怪的。您的程序有错误,适当的措施是修复它们。
  • 你是对的访问冲突,也许是别的东西(我不记得了,这种情况很少发生)。我知道它有很多错误,就像 0.1 pre-alpha 版本的机器人做一些类似众包的重复性任务,有很多错误,但它已经在做它的工作了。在我优化所有东西之前,我只是想要临时解决方案来更完美地运行它。无论如何,谢谢你的回答。
  • @user1262737 请考虑上面和下面写的所有内容(包括 cmets 和答案),否则您的应用程序将继续变得复杂,并且在某些时候重写比继续使用它更便宜。
  • 只是为了备份所有其他 - 修复错误!这是进步的唯一途径。善用异常——我目前的嵌入式作业没有异常处理,定位严重错误非常痛苦。

标签: delphi exception dialog delphi-7 raise


【解决方案1】:

如果您只是不想显示异常窗口,请转到:

工具/选项/调试器选项/语言异常并禁用复选框通知语言异常。这对 Delphi 2010 来说是正确的。

(我不记得它是否与 Delphi 7 中的 CheckBox 相同)。

编辑: 在某些情况下,例外是不可避免的,特别是当我们处理来自互联网的未知文件时。所以,我相信您的异常在 Indy 下得到了妥善处理,只需关闭 Notify on language exceptions

【讨论】:

  • 在Delphi 7中,类似Tools --> Debugger Options --> Language Exceptions --> 取消勾选'Stop on Delphi Exceptions'
【解决方案2】:

您可以自定义 Application.OnException 事件。但是恕我直言...

  • Application.OnException 最适合记录您忘记处理的异常。
  • Application.OnException 应该仅在您迫切需要性能时才用于捕获异常(在这种情况下,您应该预料到执行路径会中断)。

还有:

  • 访问冲突是致命错误 - 您必须跟踪并清除所有 AV。
  • 您不能仅通过 Application.OnException 覆盖来隐藏异常对话框 - 您应该以正确的方式使用 try finally/except。

【讨论】:

  • "你不能像那样只扫除异常——你应该以正确的方式使用 try finally/except。"好吧,正确的做法是不要使用try/except.....
  • @DavidHeffernan try/except 完全有效,如果你以正确的方式使用它。例如。不是为了扫除所有覆盖try..except end;的地毯,而是对不同的异常进行实际处理。
  • @DavidHeffernan: 你的意思是 try {...} except {handling any possible exception} end 或者 try {} 有什么问题除了 E: ESpecificException do {handle specific exception only} end I不知道?
  • 为什么要处理异常?让它浮动到顶级异常处理程序并在那里处理它。该经验法则有时会有例外,但这是起点。
  • @DavidHeffeman - try/except 是一个有效的编程工具恕我直言,就像所有其他语句一样。我用它来确定哪些数据集在某个计算中是有效的。如果出现计算,则数据集无效。如果不是,则数据集有效。这是遍历大量数据集并标记正确数据集的好方法。
【解决方案3】:

绕过 Application.OnException 事件。但是我不建议隐藏所有异常,恕我直言,这是糟糕的设计。

【讨论】:

    【解决方案4】:

    @ GJ - Delphi 2007 有该复选框。但同样如上所述,访问冲突不是应该忽略的异常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多