Форум: "Основная";
Поиск по всему сайту: 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.02 c
3-19048           Khlexa                2002-02-07 17:57  2002.03.07  
Отчет в Excel


1-19260           Revo                  2002-02-20 11:36  2002.03.07  
Формирование Word-овских документов из Delphi


4-19387           YUS                   2001-12-20 20:11  2002.03.07  
Как закрыть окно созданое explorer ?


3-19110           Ser_Kham1             2002-02-11 14:20  2002.03.07  
Чтение из таблицы Oracle


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