Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.005 c
3-19056
Potemkin
2002-02-07 09:38
2002.03.07
DBGrid


3-19102
Siberia
2002-02-11 11:45
2002.03.07
Подскажите где взять компоненты для печати


1-19204
macinsoft
2002-02-18 09:27
2002.03.07
Есть StringGrid, есть PopUpMenu на странице ...


1-19120
mr_X
2002-02-13 14:40
2002.03.07
MDI


1-19191
avr555
2002-02-18 17:25
2002.03.07
К чему привязано меню!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский