Форум: "Основная";
Поиск по всему сайту: 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.022 c
14-19350          Blackweber            2002-01-20 14:52  2002.03.07  
Я нашел Д.Кнута в эл. варианте. Только не знаю как прочитать ТеХ формат в котором они сделаны. Подскажите если кто сталкивался!


14-19343          evgeg                 2002-01-22 23:58  2002.03.07  
Что в ВУЗ-х стали не на Pascal-е учить, а на C?


1-19237           [Genius]              2002-02-16 10:55  2002.03.07  
Поможете чайнику?


6-19292           iXANiA                2001-12-19 11:17  2002.03.07  
Как организовать SPX соединение под WIN32


7-19356           Ant_bofh              2001-11-29 08:59  2002.03.07  
Опять COM-порт и всё что связано :-)