Форум: "Основная";
Текущий архив: 2002.03.07;
Скачать: [xml.tar.bz2];
ВнизПоиск ошибки Найти похожие ветки
← →
Georg (2002-02-20 16:12) [0]Здоровеньки булы, мастаки! Бьюсь над проблемой, видимо скору разобьюсь :-( В приложении возникает ошибка (индекс списка превышает максимум). Попытался логически понять, где она может возникнуть, но похоже дело в чем-то в другом, т.к. она всплывает "спонтанно", нет каких-то определенных действий, с ней связанных. Пользователи выполняют совершенно разные операции, пытался повторить их действия - бесполезно. ВОПРОС: есть ли какая-нибудь возможность определить имя переменной, вызвавшей ошибку, или хотя-бы имя модуля. Программа чужая, тыкаюсь в ней как слепой котенок, помогите, кто может ;-)
← →
Юрий Зотов (2002-02-20 16:29) [1]1. Запустите программу под отладчиком.
2. Воспроизведите ситуацию ошибки, на сообщении нажмите OK.
3. В этот момент Delphi подсвечивает оператор, следующий за тем, который привел к ошибке.
4. Поставьте BreakPoint на предыдущей строке, нажмите Ctrl+F2 и запустите программу еще раз и снова воспроизведите ошибку.
5. При остановке на BreakPoint проверьте, чему равно значение индекса списка и сколько в этом списке вообще есть элементов. Скорее всего, первое превышает второе.
6. Нажмите Ctrl+Alt+S - появится стек вызовов. Пройдите по нему, проверьте код и значения переменных.
← →
Georg (2002-02-20 16:32) [2]Проблема в том, что я не могу воспроизвести ошибку, я пытался, но она не хочет...
← →
McSimm (2002-02-20 16:33) [3]Добавлю, что при этом желательно откомпилировать программу с флажком "Use debug dcu"s", так как ошибка может возникнуть в одном из стандартных модулей (хоть и по вине разработчика).
Из собственного опыта
← →
McSimm (2002-02-20 16:39) [4]>Georg (20.02.02 16:32)
Что бы сделал я.
Точнее что я сделал для критичной к ошибкам программы.
С помощью библиотеки JCL откомпилировал программу, переписал глобальный обработчик исключений. Теперь все необработанные Exceptions протоколируются вместе с названием процедуры, названием модуля и номером строки. В принципе можно протоколировать и состояние стека со всей информацией.
← →
Georg (2002-02-20 16:56) [5]>McSimm
Название процедуры и прочее можно получить только используя JCL?или можно как-нибудь стандартным образом. У меня, к сожалению, мало времени...
← →
McSimm (2002-02-20 17:04) [6]Использование JCL как раз и позволяет сэкономить свое время.
Но можно и без нее.
JCL делает это стандартным методом, используя map-файл. Единственное отличие - она присоединяет map файл к exe файлу.
Самый простой способ:
- откомпилировать с map файлом;
- протоколировать необработанные Exceptions с адресом (желательно и стек)
- потом в map файле находить источник ошибки. Или пользоваться "Find error" в Делфи
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.03.07;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.036 c