Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 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" в Делфи




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.07;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.023 c
14-19349          Лана Розанова         2002-01-18 13:38  2002.03.07  
Компоненты


1-19162           Belov                 2002-02-21 14:58  2002.03.07  
Отправка писем


1-19187           Gayrus                2002-02-18 03:15  2002.03.07  
Строки


7-19353           UN9GW                 2001-11-29 10:56  2002.03.07  
About LPT


14-19321          vajo                  2002-01-22 12:49  2002.03.07  
Win2000