| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Application Error - Exception EAccessViolation |
| Автор: vinc2000 31.3.2013, 19:35 |
| Здравствуйте. С недавних пор при проверенном выходе (закрытии формы 1) стала вываливаться эта ошибка. Полный текст: Application Error Exception EAccessViolation in module **** at 001D2AE6 Access violation at adress 005D2AE6 in module ***. Read of address 037DC4C0. Ошибка то появляется то пропадает, т.е. рандомит. Дело возможно в GLScene/\ Переустановка D7 + всех компонентов проблему не решила. Отключение всех dll не помогло. Также как ковыряние в гугломании. Вся надежда на вас |
| Автор: kami 31.3.2013, 19:38 |
обращение к какому-то уже освобожденному объекту/области памяти (возможно - попытка повторного освобождения). Добавить в проект FastMM в debug-режиме и будет щасте. |
| Автор: vinc2000 31.3.2013, 19:42 |
| понятно...значит утечки. Спс. за оперативность! |
| Автор: kami 31.3.2013, 19:51 |
Да нет, не совсем утечки. Просто FastMM скажет "попытка обращения к уже удаленному объекту". Объект был создан тогда-то так-то, удален тогда-то и так-то. А сейчас ты лезешь к нему, уже удаленному вот так. Гораздо проще найти ошибку повторного обращения, имея полный стек действий, приведших к ошибке. |
| Автор: vinc2000 1.4.2013, 08:15 |
| Ок. Буду разбираться. |
| Автор: Beltar 1.4.2013, 14:18 |
| Я недавно столкнулся с похожей ошибкой. Шаманил часов 6, проблема оказалась в неправильной низкоуровневой функции переставлявшей байтики и в какой-то момент разрушавшей память. Если в коде есть что-то подобное, то проинспектировать тщательно и попробовать потключать вызовы. |
| Автор: vinc2000 2.4.2013, 15:10 |
Потестил с использованием FASTMM. Результаты для меня как азбука морзе ![]() Включил по совету FullDebugMode и LogMemoryLeakDetailToFile. Файл в приложении. Так на кого мне все-таки кивать - на удаленный объект или утечку? |
| Автор: northener 2.4.2013, 15:39 |
Рекомендую попробовать http://www.eurekalog.com/index_delphi.php. Триальная версия полнофункциональна в течение 30 дней. Ну и вот ещё хорошая статья http://www.gunsmoker.ru/2009/05/access-violation.html. |
| Автор: Beltar 2.4.2013, 15:56 |
| К теме http://www.gunsmoker.ru/2010/02/redux.html Проблема в том, что если память где-то раздолбана, то тестом на утечки это сложновато выловить. Мне вот здесь http://forum.vingrad.ru/forum/topic-365498.html от FastMM тоже толку не много, и без него видно, что объект nil, но почему я не знаю. Если у тебя GL-Scene, то наверняка есть какие-то буферы вершин и т. п. (3D-графикой интересовался поверхностно), довольно хорошее место чтобы ошибиться с указателями, размером данных, не прописать packed и т. п. |
| Автор: vinc2000 2.4.2013, 17:09 |
| Ок. Буду разбираться. Спс. за наводки. |
| Автор: northener 3.4.2013, 01:16 |
Обрати внимание на сторонние компоненты, которые ты может быть используешь, которые могут создавать доппотоки. Ну и ещё на таймеры. Их желательно первым делом выключать ручками при закрытии приложения. |
| Автор: vinc2000 3.4.2013, 19:00 |
| Отписываюсь о результатах: 1. Скачал и установил Эврику, но в видео-туториале XE2, а у меня семерка в XPSP3 - пунктика нету так и не понял где его искать надо... 2. Провел санацию кода: таймеров оказывается меня нет, освободил все TBitmap'ы, вычистил все что связано с GLScene, убрал подозрительный код и... ошибка осталась, но только когда компилится, т.е. в самой IDE, при внешнем запуске - все работает просто идеально! Странно ![]() (Подозреваю что дело тут возможно в кривых компонентах или IDE). Поэтому... 3. Соглашусь с GunSmoker'ом, что это частично "Глюки Delphi", т.е. ЛЖЕ-УТЕЧКИ... |
| Автор: northener 3.4.2013, 19:16 | ||
Какого пунктика? |
| Автор: vinc2000 3.4.2013, 19:23 |
EurekaLog Options, т.е. не могу Activate EurekaLog.![]() |
| Автор: northener 3.4.2013, 20:01 |
| На Д6 выглядит так: |
| Автор: vinc2000 3.4.2013, 22:30 | ||
| Ок. Потестил Eurek'ой -> ссылается на компонент регулятор громкости jantracker (начало модуля). http://s2.ipicture.ru/uploads/20130403/VeqgZw3H.jpg Удалил его - ошибка исчезла! Поставил заново - все тоже. Но компонент для меня незаменимый, поэтому прошерстил jantracker.pas, проблема я думаю в неособожденном
Кто что думает по этому поводу? P.S. Улетная вещь - эта ваша Эврика! |
| Автор: northener 3.4.2013, 22:36 | ||
Ты не Leaks показывай, а Call Stack. И посмотри на какой строке исходника произошла ошибка. |
| Автор: vinc2000 3.4.2013, 22:57 | ||||
| А call stack у меня нет:( Только General и Leaks: Строка 124, т.е.:
P.S. Начал копать глубже без jantracker - та же ошибка, только теперь ссылается на Controls.pas и на Classes.pas.
Мда, как говорится - Это только начало пути... |
| Автор: northener 3.4.2013, 23:11 |
Можешь выложить сюда эльфа? (Файл "Имяприложения.elf") |
| Автор: northener 4.4.2013, 01:15 |
Ага понял. Это было всего лишь сообщение об утечках памяти. Но топик-то вроде изначально был об AV. Ты вот получи AccessViolation при включенной Эврике. Тогда посмотрим на отчёт Эврики и поговорим. А на утечки памяти потом обратишь внимание. Они конечно зло. Но AccessViolation гораздо хуже. И гораздо труднее находить его причину. И уж утечки памяти (Memory Leaks) никак не могут быть причиной AccessViolation! Тут совсем обратная ситуация. Утечки памяти это когда программа просит у ОС выделить для себя память, получает её, как-то использует (чаще всего однократно) и забывает её возвращать ОС. И таким образом память будет потеряна. Программа её не использует, а другим программам эта память не может быть передана. AccessViolation же возникает в том случае, когда программа обращается к области памяти, которая ей не принадлежит. Либо не была выделена ОС, либо ранее была выделена ей, но уже возвращена ОС. P.S. ОС - Операционная система. В данном случае Windows. P.P.S. Термин программа стоит читать как процесс. |
| Автор: Beltar 4.4.2013, 15:59 |
| Вполне возможно, что удалив компонент ты только уменьшил размер программы, так что разрушение памяти стало происходить где-то в "безопасной" зоне (ну может данные какие-то, которые можно безнаказанно затереть\испортить), добавил процедурку в обработчик и все, размер снова вырос, и ломается какая-то нужная таблица. У меня в соседней теме ошибка вообще оказалась в непрописанном inherited Create. Причем сколько помню это inherited всегда вставлялсь автоматически при создании конструктора по Ctrl-Shift-C, можешь свои классы, если есть на подобное проверить, но подобное все-таки локализует проблему ошибочным классом. |
| Автор: Akella 4.4.2013, 20:28 |
Ты путаешь Windows и Delphi |
| Автор: vinc2000 4.4.2013, 21:44 |
Я пока что ничего не путаю Если ты смотрел туториал - там тестится на XE2 в 7, а у меня D7 в XPSP3. (проблема с установкой EurekaLog уже решена) Ок. Я так понимаю что это дело может затянуться надолго Ковырять надо jantracker.pas, и файла elf у меня кстати нет:(. А где его искать то надо? У этой медали 2 стороны: нельзя не рассматривать такой вариант, когда все же никто не застрахован от подобного рода разрушений памяти. Я конечно не даю 100% гарантии, что логика верна (результаты FASTMM тому в доказательство), но все же стараюсь придерживаться "простоты и прозрачности кода", а также его периодической санации, т.е. удаляю/заменяю деструктивные участки. В целом благодаря модульности (видео-1 модуль, текст+аудио-2 модуль и т.д.) код не превращается в неперевариваемую кашу и может поэтому удается избегать тучи критических AV и AError'ов. Кто знает |
| Автор: northener 4.4.2013, 21:55 |
Да забудь ты про утечки! Они тут не при чем. Когда появится ошибка, тогда появится и файл. В той же папке, что и программа. |
| Автор: vinc2000 4.4.2013, 22:18 |
| Специально сейчас нашел AV во внешке exe - Call Stack теперь есть! И нашел el-файл (он был аж в Application Data\EurekaLab s.a.s\EurekaLog\Bug Reports) Прикрепляю. AV-ошибка мне известна, т.е. она возникает не при закрытии программы, а при клике. |
| Автор: northener 5.4.2013, 01:36 | ||
Очень хорошо, что нашел. (Я являюсь честным обладателем лицензии на Эврику, но версии 6. А в версии 6 эти файлы Эврика помещала в папку программы). Вот теперь открой этот файл при запущенной Дельфи и щёлкни по строке |7FFFFFFE|04 |00000000|006BA7E6|FlashEx.exe |002BA7E6|Unit3 |TForm3 |Next_btnClick |126[3] | Или открой модуль, в котором описан тип TForm3, найди в нем метод Next_btnClick и посмотри, что там находится на третьей строке полсле начального begin. И покажи эту строку тут. P.S. На худой конец кинь мне в личку сам EXE-файл и DLL файлы, которые ему нужны. Попробую найти проблему. |
| Автор: vinc2000 5.4.2013, 14:11 | ||
А в чем проблема-то northener? Эта ошибка связана с листанием листов pdf-файла и возникает она потому-что книга не загружена, а кнопки листания активны Я уже понял, что самое главное - когда при внешнем закрытии все ок!, а то что там при выходе в режиме компиляции вываливаются какие-то ErrorDialogs или AV - это все пурга См. вложение (Next_btn & Previous_btn обведены - а в коде условие с циклом) |
| Автор: Чучмек 5.4.2013, 14:28 | ||
Уверен? Есть обращение в никуда. Просто под отладчиком память распределяется по-другому |
| Автор: Beltar 5.4.2013, 16:13 |
| Мне вот пока известен только один случай явной пурги, это неизвестное исключение при работе с базой, когда таблица не может лукапнуть что-то, т. к. KeyValue=NULL, в остальных случаях вряд ли стоит надеяться, что все прокатит. |
| Автор: vinc2000 5.4.2013, 20:09 |
| Даже так бывает. http://s1.ipicture.ru/Gallery/Viewfull/23636599.html Спс. всем за участие! Тему можно закрывать. |
| Автор: northener 7.4.2013, 01:52 |
Очень необдуманное решение! Очень глупо перестать искать ошибку в программе. А она там точно есть! |