Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2009, 06:19   #1
AHTuKiLLeR
Пользователь
 
Регистрация: 27.05.2009
Сообщений: 15
По умолчанию Ошибка Access Violation

Такой вопрос. У меня в проекте, совершенно неопреоделимо возникает ошибка Access Violation. Программа представляет собой управление устройствами через СОМ порт. "Посылка сообщения - прием сообщения - анализ сообщения - посылка нового сообщения - " и т.д. Посылка и прием сообщений происходят в двух потоках.
Подскажите. Как выловить где возникает данная пакость?
AHTuKiLLeR вне форума Ответить с цитированием
Старый 02.06.2009, 06:46   #2
BaronTreep
Форумчанин
 
Регистрация: 29.05.2009
Сообщений: 320
По умолчанию

Сделай брекпойнты (левее кода нажимаешь, появлятся красные маркеры) на которых программа будет останавливаться, можно будет посмотреть значения всех переменных. Хотя иногда при Access Violation Delphi сам ставит синим на больную строку...
BaronTreep вне форума Ответить с цитированием
Старый 02.06.2009, 07:01   #3
AHTuKiLLeR
Пользователь
 
Регистрация: 27.05.2009
Сообщений: 15
По умолчанию

эти красные точечки (омг) не помагают. И синеньким ничто не подсвечивается. (опять таки омг)

Программа бывает работает час, а бывает и пять минут. Поэтому мне как-то сложно классифицировать место сбоя.
Пытался ловить конструкцией try...except...end; Не помогло.
AHTuKiLLeR вне форума Ответить с цитированием
Старый 02.06.2009, 08:03   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Смотреть нужно программу и отлаживать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.06.2009, 08:38   #5
AHTuKiLLeR
Пользователь
 
Регистрация: 27.05.2009
Сообщений: 15
По умолчанию

Ну а какие есть программные способы вылавливания этой ошибки?
AHTuKiLLeR вне форума Ответить с цитированием
Старый 02.06.2009, 08:55   #6
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

они все программные, об аппаратных не слышал.
У встроенного дебагера есть вагон возможностей от watch lists до стандартных брейкпоинтов с просмотром состояний, стека, и т.д. 90% проблем решаеются клавишами F4,F7,F8
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 02.06.2009, 10:11   #7
AHTuKiLLeR
Пользователь
 
Регистрация: 27.05.2009
Сообщений: 15
По умолчанию

Вот сейчас прога работает больше часа. Спецом сижу и жду возникновение ошибки. То есть если прикинуть то прога рабочая. Но по закону пакости стоит уйти и она крашнется, что вводит меня в некую прострацию. Спрашивается "какого...."? Прога работает по замкнутому циклу. И прошла его уже не раз. Но ошибка эта все равно возникает. Почему?
Есть какие-нибудь другие операторы наподобии try...except для локализации проблемного участка кода?
AHTuKiLLeR вне форума Ответить с цитированием
Старый 02.06.2009, 10:40   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Есть какие-нибудь другие операторы наподобии try...except для локализации проблемного участка кода?
Скажем так: try...except - их обертка )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.06.2009, 10:48   #9
BaronTreep
Форумчанин
 
Регистрация: 29.05.2009
Сообщений: 320
По умолчанию

Цитата:
Есть какие-нибудь другие операторы наподобии try...except для локализации проблемного участка кода?
1.
Try
...
Except
On <Класс1> do <Обработчик1>
On <Класс2> do <Обработчик2>
Else <Обработчик0>

Используется для ЯВНОГО назначения обработчиков для каждого класса ошибок, при этом дожно быть соответствие классов ошибок и методов обработчика. Без блока обработчиков компилятор считает, что исключения могут быть любые.

2.
Try
...
Finally
...
End;

Используют если важно коректное завершение процесса с точки зрения ОС, а не с точки зрения процесса. Это протекция ресурсов при ошибочном выполнении.

Предполагается, что эти блоки "молчат" при успехе, и выдают сообщения если не могут обработать исключение.

3.
В связи с чем, просто вылет программы - это конфликты на уровне windows в памяти. Если драйверы (самописные?) ссорятся с программой, например.
Debug -> Modules занимается отладкой взаимодействия с модулями. Но я в этом не разбираюсь - там на низком уровне всё...

4.
Win-Api функции часто сигнализируют об успешном/провальном выполнении. Если есть цепочка таких функцый 1-2-3-4... и где нибудь не устроить проверку на успешное выполнение, то дальше будут тащится неполные данные и последующие функции могут несработать...

5. Еще: можно сделать приложение, которое в реальном времени вызывает GetLastError и на этой основе делает лог ошибок (есть ещё функция перевода ИД ошибки в текст, забыл).

Последний раз редактировалось BaronTreep; 02.06.2009 в 11:08.
BaronTreep вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
access violation at address UnChanter Общие вопросы Delphi 22 07.02.2011 11:00
Access Violation SunKnight Общие вопросы Delphi 2 05.06.2008 16:46
Access violation at address.. RegentM Общие вопросы Delphi 4 01.11.2007 03:46
Ошибка: "Access violation at address 00454F01 in module 'Project1.exe'. Read of address 00000000. Fen1x Общие вопросы Delphi 8 13.10.2007 20:13
Access Violation Carbon Общие вопросы Delphi 12 18.09.2007 19:55