Как я могу найти местоположение ошибки «индекс списка вне границ» в Delphi
-
19-09-2019 - |
Вопрос
В Delphi 2009 моя программа теперь производит ошибку «индекс списка вне границ». Он генерирует всплывающую коробку:
(источник: ЗДЕСЬ)
Я использую конфигурацию сборки «Debug», которая включает в себя всю проверку ошибок выполнения. Но это не захватывает ошибку до того, как это произойдет.
Есть ли какой -либо простой способ найти источник этой ошибки в моей программе без необходимости помещать в точки останова и сузить ее методом проб и ошибок?
Решение
У вас включено «Остановка на исключениях Delphi»? (Инструменты Параметры отладчика Exceptions [delphi7]), в противном случае он не сломается в вашем sourcecode.
Также убедитесь, что Elisterror не находится в вашем списке «Типы исключений, чтобы игнорировать». Этот список также находится в инструментах Варианты отладчика исключения языка (Delphi 7).
Другие советы
Эй, вам не нужны дополнительные инструменты, чтобы отслеживать это! :)
Просто запустите свое приложение в рамках отладчика и убедитесь, что «остановитесь на исключениях Delphi» (или как это называется в версии вашей Delphi) НА.
Когда произойдет исключение - будет уведомление от отладчика. Нажмите кнопку «ОК»/«Отладка» и просто просмотрите стек вызовов. Окно стека вызовов отображается автоматически в недавней версии Delphi. Если вы не можете его увидеть - перейдите в «Просмотр»/«Отладка Windows»/«Степок вызовов».
Это все. Стек вызовов укажет вам в точное местоположение проблемы. Анкет Не требуется дополнительного инструмента.
Эти инструменты (Eurekalog, JCL или Madexcept) необходимы, если вы распространяете свою программу среди пользователей и хотите собрать отчеты об ошибках о проблемах на стороне клиента. Т.е. нет никакого отладчика, чтобы проверить проблему.
Поскольку это ошибка RTL/VCL, вы часто получаете лучшее поведение разрыва/Callstack, если вы включите отладочную DCU (и восстановление).
Есть намеки на то, что делает ваше приложение, когда это происходит? Длинная петля? Кнопка нажмите?
Когда приложение останавливается, и вы смотрите на окно отладки стека вызовов, можете ли вы отследить звонок до последнего вызова из вашего кода? Стек вызовов не расскажет вам все условия, но может сузить местоположение.
Как только вы сузите вызов, инструмент для ведения журнала, как Кода может быть действительно полезным. Например, я часто регистрирую контрольные переменные цикла, чтобы выяснить, какая итерация происходит последней до ошибки, тогда это вопрос идентификации вероятных подозреваемых.
Для ListBox, TStrings ... означает, что индекс находится за пределами списка-> count ,. Анкет Пример tstring-> strnigs [?]; [?] Является ли <0 или> (tString-> count-1) вывеет из-за ошибки границ.
Что касается NMPOP3 и т. Д., ... если использовать POP3Client для получения электронной почты, у него есть ошибки в UNIX/? POP3 Server, который я наткнулся, используя его, чтобы получить электронную почту по почте .???.com, но с некоторыми.
Наконец, я должен переписать свое приложение POP3Client с TClientSocket вместо TNMPOP3. Теперь работает с каждым из Pop3server, с которым я подключился.
Надеюсь, эта помощь и удачи