【问题标题】:How to find the location of a "List index out of bounds" error in Delphi XE2如何在 Delphi XE2 中找到“列表索引越界”错误的位置
【发布时间】:2026-01-20 14:40:02
【问题描述】:

在 Delphi XE2 中,我的程序现在会生成一个“列表索引越界”弹出对话框。

我已在(工具\调试器选项\语言异常)下打开“通知语言异常”,但调试时未显示异常。

以下异常类型设置为忽略。

  • VCL EAbort 异常
  • 印地静默例外
  • Microsoft DAO 异常
  • System.Threading.SynchronizationLockException
  • System.Threading.ThreadAbortException

有没有一种方法可以捕获异常而无需借助断点反复试验?

编辑我试图让异常对话框在调试时出现。

【问题讨论】:

  • 您是否验证了应用程序正在加载调试?例如,当您在调试模式下运行它时,“事件日志”会显示正在加载的模块。您的 EXE 是否显示 No Debug InfoHas Debug Info?另外,您是否做过build 而不是只做compile?某些不是通过调试构建的 DCU 可能会链接到您的项目中。执行 build 应确保所有 DCU 都使用调试构建,除非它们是 explicit rebuild 包的一部分。
  • 您可以添加您实际看到的对话框的图像吗?即使我使用发布配置构建,我也无法重现这一点 - 我仍然看到 Break/Continue 异常对话框,尽管 Break 按钮没有显示位置 - 我可以双击相同的位置调用堆栈窗口,但由于缺少调试信息,我最终进入 CPU 视图而不是源代码。
  • 它显示有调试信息,我已经完成了项目的构建。
  • “有没有一种方法可以捕获异常,而无需借助断点反复试验?”恕我直言,这不是“反复试验”,但是是的,您可以检查: if NOT ( ( index >= 0 ) and ( index then showmessage('caught error at index: ' + IntToStr(Index)) else 做你的事...
  • 如果异常发生在 VCL 中,并且您想在点击 break 而不是 CPU 视图时查看源代码,那么您必须编辑项目选项并告诉它使用 debug DCUs 进行编译然后build 项目。

标签: delphi error-handling indexoutofboundsexception


【解决方案1】:

我的一个项目也遇到了同样的问题,Delphi 无法捕捉到异常,让我点击breakcontinue 按钮。我的问题是我有一些没有调试的 DCU 正在链接,因为 Delphi 在编译/链接时首先找到了它们。

我看到的另一个导致这种情况的原因是,当我使用了一些在没有调试的情况下构建的组件和/或包时,其中发生了异常。一旦我用 debug 构建了包和组件,然后重新构建了我的项目,Delphi 就发现了异常。

【讨论】:

    【解决方案2】:

    “附加选项”框的值为 -LUDesignIDE。似乎这阻止了 Delphi 捕获异常,一旦删除,事情就会恢复正常。我不知道是只有这个选项会导致这个问题,还是输入的其他选项会导致同样的问题。

    【讨论】:

    • 这个盒子在哪里?