![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Возникает сообщение об ошибке как его обработать ? [D7, WinXP]
San1712 © (2007-12-01 06:58:00)Расположенное ниже сообщение появляется во время выполнения программы. Как я понимаю в нём говорится что где переменная маленького размера. Но проблема в том что эта ошибка возникает в том месте там где нет ошибки, у меня уже такое было, как автоматизировать поиск ошибки ?
Project Project1.exe raised exception class ERangeError with message 'Range check error'. Process stopped. Use Step or Run to continue.
Юрий Зотов (2007-12-01 12:58:00) [1]> San1712 (01.12.07 06:58)
Это ошибка выхода за диапазон. Возникает она в двух случаях:
1. Переменной пытаются присвоить слишком большое или слишком маленькое для нее значение. Например, переменной типа byte пытаются присвоить значение -1, или 1000.
2. Пытаются обратиться к несуществующему элементу массива. Например, массив содержит 101 элемент с индексами от -50 до +50, а пытаются обратиться к 51-му элементу.
> эта ошибка возникает в том месте там где нет ошибки
Вам самому-то не смешно читать такие заявления?
Ошибка не может возникатьтам, где ее нет. Так не бывает. Она может проявлятьсятам, где ее нет - вот такое бывает. Значит, либо ошибка все же есть, либо возникает не там, где Вы думаете.
==========================
1. Запустите программу под отладчиком. Когда появится сообщение об ошибке просмотрите стек вызовов. Поставтьте точку останова на одну строку раньше той, которая привела к ошибке и снова запустите программу под отладчиком.
2. Программ должна без всяких ошибок прийти на точку останова. Если это не так - повторяйте п. 1 и 2 до тех пор, пока:
- не придете на точку останова без ошибок.
- и при этом нажатие F8 выдает ошибку.
3. Ошибка возникает в той строке, на которой стоит точка останова (но это не значит, что причина ошибки тоже в этой же строке, она может быть и в другом месте). Еще раз запустите программу и когда придете на точку останова - анализируйте подозрительные участки кода (на предмет выхода за границы массива) и проверяйте значения переменных (на предмет выхода за диапазон возможных значений).
Kolan (2007-12-01 12:52:00) [2]> Эта ошибка возникает для любых диапазонов, но не только
> в массивах.
Из опыта моего обычно дело в массивах(строках)
Anatoly Podgoretsky (2007-12-01 11:57:00) [3]
> Скорее всего ты вылез за границы массива. Массивы есть в
> программе?
Эта ошибка возникает для любых диапазонов, но не только в массивах.
Kolan (2007-12-01 11:51:00) [4]> На мой взгляд все очень просто
Я спросил лиш по тому что ваш код и без этой настройки сработает нормально, но автор незнает где его писать у неоже ошибка в другом месте возникает
Anatoly Podgoretsky (2007-12-01 11:47:00) [5]Ему трудно помочь, поскольку он говорит, что ошибка возникает там, где нет ошибки. Нужно чудо.
Anatoly Podgoretsky (2007-12-01 11:45:00) [6]> Igor Zorkov (01.12.2007 11:07:07) [7]
Повторяю это ошибка не из компилятора.
Igor Zorkov (2007-12-01 11:18:00) [7]
> Anatoly Podgoretsky © (01.12.07 11:15) [8]
Ну куда мне с вами спорить Анатолий, я пас, просто пытался как то помочь San1712.
Anatoly Podgoretsky (2007-12-01 11:15:00) [8]Это не ошибка компилятора.
> во время выполнения программы
во время выполнения программы компилятор не работает.
Igor Zorkov (2007-12-01 11:07:00) [9]
> Anatoly Podgoretsky © (01.12.07 10:53) [6]
На мой взгляд все очень просто, будет ли компилятор обрабатывать ошибку или нет.
Anatoly Podgoretsky (2007-12-01 10:53:00) [10]
> Igor Zorkov © (01.12.07 10:24) [5]
Это не объяснение
Igor Zorkov (2007-12-01 10:24:00) [11]
> Kolan © (01.12.07 10:03) [4]
Start>All Programs>Borland Delphi 7>Help>Using Delphi
Kolan (2007-12-01 10:03:00) [12]> В меню Tools>Debugger Options>Language Exceptions>Add
> добавить ERangeError
А это зачем делать, объясни?
Igor Zorkov (2007-12-01 10:00:00) [13]
> San1712 (01.12.07 06:58)
> Возникает сообщение об ошибке как его обработать ?
В меню Tools>Debugger Options>Language Exceptions>Add... добавитьERangeError
try
код
except
on E: ERangeError do
ShowMessage('FUCKING ERROR');
end;
Kolan (2007-12-01 09:54:00) [14]Скорее всего ты вылез за границы массива. Массивы есть в программе?
homm (2007-12-01 08:21:00) [15]> Но проблема в том что эта ошибка возникает в том месте там
> где нет ошибки
Значит ошибка где-то жо этого места.
> как автоматизировать поиск ошибки
Нанять программиста.