Главная страница
    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.004 c
1-19202
Miwa
2002-02-17 01:14
2002.03.07
Глюк с формой?


4-19394
Remy
2002-01-06 23:19
2002.03.07
Помогите завершить все работающие задачи без всяких уведомлений...


3-19114
af
2002-02-11 16:29
2002.03.07
Задумал я переделать базу работавшую под досом


6-19280
Andrey Lutsenko
2001-12-10 05:58
2002.03.07
OS Version of remote comp


3-19085
fag2000@ok.ru
2002-02-07 14:08
2002.03.07
Проблема с TDBGrid





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский