在 Delphi 2009 中,我的程序现在产生“列表索引越界”错误。它会生成一个弹出框:

alt text
(来源: beholdgenealogy.com)

我正在使用“调试”构建配置,该配置打开了所有运行时错误检查。但这并不能在错误发生之前捕获错误。

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

有帮助吗?

解决方案

你有“停止对德尔福例外”开启? (工具\调试选项\语言例外[Delphi7的])否则它不会在源代码中断裂。

另外,还要确保EListError是不是在你的“异常类型为忽略”列表。该列表也被在工具\调试选项\语言例外(Delphi 7中)找到。

其他提示

疯狂的例外 (免费)或 尤里卡日志 (付费)可能会有所帮助。您可以将它们设置为在发生错误时显示/通过电子邮件发送堆栈跟踪。我在所有项目中都使用 EurekaLog,它对于修复此类问题非常有用。

嘿,你不需要任何额外的工具来跟踪这个! :)

在调试器下,只要运行你的应用程序,并确保“停止对德尔福例外”(或任何它被称为在你的Delphi的版本)打开打开

当异常发生时 - 将有来自调试器的通知。按“OK” /“调试”按钮,只需查看调用堆栈。调用堆栈窗口是近Delphi的版本自动显示。如果你不能看到它 - 进入“查看” /“调试窗口” /“调用堆栈”

这是所有。 调用堆栈将这个问题的确切位置指向你。没有额外的工具需要。

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

由于这是一个RTL / VCL错误,你往往具有更好的断裂/调用堆栈行为结束,如果你启用调试DCU(和重建)。

任何提示,当这种情况发生时你的应用程序在做什么?长循环? A按钮点击?

当应用程序暂停,你看看调用堆栈调试窗口,你可以跟踪调用回你的代码中最后一次通话?调用堆栈不会告诉你所有的条件,但可以缩小的位置。

一旦你缩小呼叫,测井仪器如的CodeSite 可真有用。例如,我常常登录循环控制变量,以找出哪些迭代错误发生之前最后,那么它有可能识别嫌疑人的问题。

为列表框,字符串列表,... 意味着索引超出列表 - >计数。 。 例如tString-> strnigs [η]; [η] <0或>(tString->计数-1)会导致超出范围的错误。

作为NMPop3等,... 如果使用pop3client获取电子邮件,它有一个错误的一些UNIX /? POP3服务器, 我已经跨越用它来从mail.???.com电子邮件,但一些好的来了。

最后我不得不重写我的Tclientsocket构件实现,而不是tnmpop3 pop3client应用。 现在与每次我连接到pop3server的。

希望这有助于和好运。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top