如何在Delphi中找到“List index out of bounds”错误的位置

时间:2009-07-28 02:09:33

标签: delphi error-handling bounds-checker

在Delphi 2009中,我的程序现在生成一个“List index out of bounds”错误。它会生成一个弹出框:

alt text
(来源:beholdgenealogy.com

我正在使用“调试”构建配置,该配置已启用所有运行时错误检查。但是这不会在错误发生之前捕获错误。

有没有简单的方法可以在我的程序中找到此错误的来源,而无需通过反复试验来缩小断点并缩小范围?

6 个答案:

答案 0 :(得分:10)

您是否已启用“停止Delphi例外”功能? (Tools \ Debugger Options \ Language Exceptions [Delphi7])否则它不会破坏你的源代码。

还要确保EListError不在“要忽略的异常类型”列表中。此列表也可在Tools \ Debugger Options \ Language Exceptions(Delphi 7)中找到。

答案 1 :(得分:9)

madExcept(免费)或EurekaLog(付费)可能有所帮助。您可以将它们设置为在发生错误时显示/通过电子邮件发送堆栈跟踪。我在所有项目中使用EurekaLog,它对于修复这些事情是非常宝贵的。

答案 2 :(得分:7)

嘿,您不需要任何其他工具来跟踪这个! :)

只需在调试器下运行您的应用程序,并确保“Stop on Delphi Exceptions”(或Delphi版本中调用的任何内容)变为 ON

发生异常时 - 会有来自调试器的通知。按“确定”/“调试”按钮,只需查看调用堆栈。最近的Delphi版本会自动显示调用堆栈窗口。如果你看不到它 - 转到“查看”/“调试Windows”/“调用堆栈”。

这就是全部。 The call stack will point you at the exact location of the problem。无需其他工具。

如果您在用户之间分发程序并希望收集有关客户端问题的错误报告,则需要这些工具(EurekaLog,JCL或madExcept)。即没有调试器来检查问题。

答案 3 :(得分:3)

由于这是一个RTL / VCL错误,如果启用Debug DCU(并重建),通常最终会有更好的中断/调用堆栈行为。

答案 4 :(得分:0)

当发生这种情况时,是否提示您的应用程序正在做什么?一个长循环?按一下按钮?

当应用程序暂停并查看调用堆栈调试窗口时,您是否可以将调用追溯到代码中的最后一次调用?调用堆栈不会告诉您所有条件,但可以缩小位置范围。

缩小通话范围后,像CodeSite这样的日志记录工具非常有用。例如,我经常记录循环控制变量,以确定在错误发生之前最后发生的迭代,然后是识别可能的嫌疑人的问题。

答案 5 :(得分:0)

对于列表框,tstrings,... 表示索引超出list-> count ,. 。 tString-> strnigs [?]的例子; [?]是< 0或> (tString-> count-1)将导致超出界限错误。

至于NMPop3等,...... 如果使用pop3client来获取电子邮件,它有一些错误到一些unix /? pop3服务器, 我曾经使用它从mail.???.com上获取电子邮件,但有些人可以。

最后我必须用tclientsocket而不是tnmpop3重写我的pop3client应用程序。 现在适用于我连接的每个pop3server。

希望这个帮助&祝你好运