【问题标题】:Delphi 2007 - Is it possible to get a list of ignored exception classes at run-time?Delphi 2007 - 是否可以在运行时获取被忽略的异常类的列表?
【发布时间】:2014-12-21 20:12:55
【问题描述】:

我想在运行时确定是否在 IDE 中明确忽略了异常类。原因是这样的:当从 IDE 运行应用程序时,我可能会收到一个我知道原因但不想现在处理的异常。所以我选中“忽略这些异常”框并单击继续。

我以后可能会忘记禁用此设置,因此我想在应用程序启动时添加代码以警告我 Tools/Options/Debugger Options/CodeGear Debuggers/Language Exceptions 列表中的异常将被忽略。

另一种方法是一段代码,它可以确定异常类的状态(即是否被忽略)而不触发 IDE 中的异常

【问题讨论】:

  • 如果 IDE 没有出现异常,应用程序为什么要打扰?应用程序无论如何都会收到异常
  • 从注册表中读取它。它将在HKCU\Software 下。 IDE 专家可能会说得通。但是应用程序中的代码肯定是错误的。
  • 如果您的进程在 WinDbg 而不是 RAD Studio 下进行调试怎么办?
  • 哇哦哦。为什么投反对票?这是场景:我有一个应用程序在启动时进行网络访问。如果由于某种原因无法访问 Web,则 Web 访问会失败,从而导致异常。我的应用程序处理了这个异常,但 IDE 仍然对此感到咳嗽。所以我告诉调试器忽略这些异常,因为当我在没有 Web 访问的情况下进行调试时,它很烦人。我只是想在调试器下运行时以某种方式提醒自己,我之前已将其设置为忽略异常。
  • 我首选的处理方法可以在 this answer 中找到,这比您当前的方法或您尝试查找 IMO 的方法更容易、更灵活。

标签: delphi exception-handling delphi-2007 delphi-ide


【解决方案1】:

如果您不想在 IDE 中处理异常,请在异常发生点周围设置断点。然后编辑断点:

对于第一个,将其高级属性设置为 not Break on exception忽略后续异常

对于第二个,将其高级属性设置为 not Break on exceptionHandle 随后的异常


您必须注意不要丢弃这些断点(例如,使用 删除所有断点),有时它们会在编辑器中失去其应有的位置。如果您使用源代码管理,也很难share these with other developers

【讨论】:

    【解决方案2】:

    被调试的应用程序无权访问调试器的忽略异常列表。除非您弄清楚调试器在何处以及如何存储该配置并手动读取/解密它。

    【讨论】:

    • 这几乎是不可能的,因为 IDE 可能正在使用自定义注册表根 (IOTAServices.GetBaseRegistryKey()) 运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 2012-11-02
    • 2016-10-28
    • 2010-10-10
    • 2010-10-26
    相关资源
    最近更新 更多