【发布时间】:2026-01-20 14:40:02
【问题描述】:
在 Delphi XE2 中,我的程序现在会生成一个“列表索引越界”弹出对话框。
我已在(工具\调试器选项\语言异常)下打开“通知语言异常”,但调试时未显示异常。
以下异常类型设置为忽略。
- VCL EAbort 异常
- 印地静默例外
- Microsoft DAO 异常
- System.Threading.SynchronizationLockException
- System.Threading.ThreadAbortException
有没有一种方法可以捕获异常而无需借助断点反复试验?
编辑我试图让异常对话框在调试时出现。
【问题讨论】:
-
您是否验证了应用程序正在加载调试?例如,当您在调试模式下运行它时,“事件日志”会显示正在加载的模块。您的 EXE 是否显示
No Debug Info或Has 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