Текущий архив: 2003.05.08;
Скачать: CL | DM;
Вниз
Access violation Найти похожие ветки
← →
Andrey V. (2003-04-17 13:25) [0]Программа нет-нет да и выкинет "Access violation at address"
и т.д.
Неприятно .
Какие есть пути для решения этой проблемы ?
← →
Palladin (2003-04-17 13:30) [1]опыта побольше поднабратся... книжки почитать...
про отладку узнаешь... ошибки научишься искать...
← →
Mike_Goblin (2003-04-17 13:30) [2]Видимо вы нет, нет да и обратитесь к несуществующему объекту через его переменную
посмотрите статьи, там был материал по поводу поиска таких ошибок
← →
Goffman (2003-04-17 13:36) [3]Для отлова AV нет универсального средства. Все сильно зависит от обстоятельств его возникновения. Если ошибка возникает, когда программа находится в пассивном состоянии, то тут вообще может быть куча причин (глюк самой винды, vcl, сторонние компоненты, можно еще что-нибудь придумать)
← →
Zelius (2003-04-17 13:59) [4]Надо создать экзешник с отладочной информацией ( с Debug DCU), поискать в нем адрес выдаваемый в сообщении по ошибке и проанализировать найденный код.
← →
Digitman (2003-04-17 14:40) [5]
> Andrey V.
Сообщение ведь в такой форме "Access violation at address XXXXXXXX ..." ?
Пересобери проект с опциями встроенной отладки, запусти на выполнение, открой меню "Search | Find Error ...", введи адрес XXXXXXXX - среда тебе с немалой вероятностью покажет модуль и строчку исх.текста в этом модуле, при выполнении которой ты раз за разом "наступаешь на грабли"
← →
Andrey V. (2003-04-17 15:30) [6]Ok. Попробую.
А при "пересобирании" проекта адреса не меняются ?
← →
Digitman (2003-04-17 15:43) [7]
> Andrey V.
а тебя это не должно заботить !
ты же будешь запускать проект (для поиска ошибки таким способом) не автономно, а в среде - под встроенным отладчиком !
задача отладчика - синхронизировать номера строк с отладочной инф-цией, предусмотренной компилятором в DCU при сборке с опциями встр.отладки.
если после сборки ты не изменил вне среды, отладчик в момент старта приложения под его управлением спотыкнуться не должен
← →
Anatoly Podgoretsky (2003-04-17 17:17) [8]Digitman © (17.04.03 14:40)
а также с немалой вероятностью покажет ошибку в системной DLL, даже с большей :-)
Опыт и написание программ без ошибок.
← →
Andrey V. (2003-04-18 08:36) [9]Так прикол в том что я могу 500 раз программу запустить , скажем в течение недели , и - ничего. То есть попытка "нарваться" на ошибку ник чему не приводит(как и анализ исходников). А потом - бац , оператор показывает принтскрином полученную картинку с AV, причем со слов оператора и судя по картинке программа находится не где-то в дебрях , а только запущена и при клике на иконке - вылетает.
← →
Digitman (2003-04-18 09:07) [10]
> Anatoly Podgoretsky
> с немалой вероятностью покажет ошибку в системной DLL
не спорю) ... но это же - тоже информация к размышлению ! и - немалая ! по ней зачастую можно выйти, скажем, на BPL и - в конечном итоге - на компонент, обращение к которому в конечном итоге вызвало проблемы с DLL-вызовами. А это уже - кое-что ! Была б голова на плечах)
> Andrey V
> прикол в том что
"Прикол" в том, что ты до сих пор не воспользовался рекомендацией по поиску отказа средствами встр.отладчика и не поделился результатами такого исследования.
И продолжаешь при этом бесплодно рассуждать о "странностях жизни" приложения !
← →
Palladin (2003-04-18 09:33) [11]
> о "странностях жизни" приложения !
:)
вернее сказать уже не жизни, а зарождения.
> Andrey V. (18.04.03 08:36)
есть в программировании такая вещь как ведение лога приложения, очень хорошо помогает... пиши лог в текстовый файл, что в твоей программе происходит... это самое простейшее и примитивное, что я тебе могу посоветовать...
← →
Palladin (2003-04-18 09:37) [12]если конечно от того что сказал Digitman © (17.04.03 14:40) тебя корежит...
а если не вдумываешься в ответы, какой смысл просить помощь...
← →
LEON (2003-04-19 21:18) [13]AV происходит, когда приложение пытается записать или прочитать данные в/из неразрешённую(ой) область(и) памяти, такое, чаще всего случается при неправильном вызове конструкторов, несвоевременном удалении объектов, конструкциях типа
MyString[IntegerGreaterThanLengthOfMyString], где из самого названия переменной ясно, что число больше чем длина строки, итд, итп. Пересмотри свою прогу на наличие таких глюков и похожих, может, выйдет
← →
Думкин (2003-04-21 07:30) [14]Это одна из самых трудноуловимых ошибок в больших проектах.
В малых - тут было - неправильная работа с динамическими массивами и иже с ним. Тем боллее есть вероятность проскочить "на дурака", т.е. в некоторых сеансах твоя прога будет работать тип топ - а иногда нет.
Сейчас - надо проверить весь проект на наличие ОШИБОК.
Создание и освобождение объектов, массивы и т.д. Память в общем.
Ну что и сказано было.
← →
MVova (2003-04-21 08:38) [15]Потоки используеш?
Поначалу такое трудно ловить, но со временем все ловится практически безпроблем. Самое трудное имитировать ошибку у себя, особенно если она то есть то нет.
Первое что надо делать, это бобится ошибки у себя, чтоб стабильно появлялать, а потом резать на корню ее :)
Очень сильно помогает адрес откуда был вызов.
> Digitman © (17.04.03 14:40)
← →
Digitman (2003-04-21 09:06) [16]
> LEON
> число больше чем длина строки
Пример с выходом индекса символа (при обращении к строке как массиву символов) за границы размерности массива не очень показателен в дан.случае, ибо далеко не всегда гарантированно вызовет AV-исключение. Связано это с особенностями работы конкретного менеджера памяти, который выравниваниет размер аллокируемого под строку блока памяти до значения, кратного степени двойки (это м.б. и 4 байта и 16 байт и ...).
Страницы: 1 вся ветка
Текущий архив: 2003.05.08;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.009 c