Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.19;
Скачать: CL | DM;

Вниз

Как определить почему возникает access violation? :(   Найти похожие ветки 

 
Новичек   (2003-11-25 14:08) [0]

Господа, подскажите, пожалуйста, пути решения. Хоть сам кой-какой опыт в Дельфи имею, но никогда не попадал в такую "тупую" ситуацию.
Пишу "проект" - Delphi 7, MySQL, EhLib.
Все было хорошо, но на каком-то этапе внезапно стала возникать ошибка "Access Violation по такому-то адресу (разные адреса)".
Возникает плавающе (не всегда) в следующей ситуации - открывается форма редактирования любой записи из базы - на форме есть два чекбокса - меняешь состояние любого - жмешь Ок - изменение сохраняется в базе и ошибка может выскочить (а может и не выскочить) именно в этот момент.
Причем, изменения состояния других компонентов никак не влияет.
Кто может подсказать - что можно сделать в такой ситуации? Никак не пойму отчего это, самое неприятное, что ошибка плавающая. :(
Отключал модули, куски "проекта" - не помогает.
Подозреваю, что глючит EhLib, но уверенности нет. Как бороться?
Не дайте погибнуть!


 
Digitman ©   (2003-11-25 14:12) [1]


> Подозреваю, что глючит EhLib


запросто, кстати...

собери проект со всеми опциями встр.отладки
запусти его под отладчиком Делфи
выбери меню "Search | Find Error ..", введи адрес, фигурировавший в сообщении об AV ("..at address XXXXXXXX ...") - отладчик с достаточной долей вероятности покажет тебе строку исх.текста, при выполнении которой произошло AV


 
Карелин Артем ©   (2003-11-25 14:17) [2]

Убедись, что в опциях проекта не стоит Complete boolean eval и сделай ребилд всего проекта.


 
Новичек   (2003-11-25 15:44) [3]

Спасибо за ответы!

Может быть, кому-то, кто юзает (или хочет заюзать) EhLib, будет полезно - проблема оказалась в нем, как я и подозревал.
Причем, проблема неприятная - из разряда непонимаемых даже автором EhLib.
Мне помогло вот что - в DBGridEh.pas есть закомментированная строка:

Columns[SelectedIndex].Field := nil; //Some time AV BUG

Нужно ее раскомментировать и пересобрать проект. Ошибка уходит.
Стоит закоментировать обратно - снова вылезает.

Правда, как сказал сам автор EhLib, раскомментирование приводит к каким-то другим траблам, но каким он не помнит. Причину же возникновения проблемы вообще, по его словам, он так и не смог понять, что огорчает. :(
У меня пока ничего плохого не вылезло, но все равно неприятно - 70% проекта уже закончено, причем завязано все на EhLib (впрочем, ему альтернативы все равно по-большому счету нет), а тут такая засада.


 
Riland   (2003-11-25 15:52) [4]

Всем приет
Юзаю EHlib уже года 4 (с момента его появления)
С повлением траблов в нем согласен
Я выходил из данной ситуации следующим образом - находил строку с ошибкой
(у меня компонент с исходниками) и брал его в try..except..end
Помогает на 100% - т/е/ ошибка вс равно вылзает, но она уже никакого
действия на функциональность прграммы не оказывает

А что альтернатиы EHLib в большенстве случаев нет - полность согласен.
Смотрел недавно Quantum Grid - уж очень он тяжел и перегружен
ненужными функциями (хотя для определенных задач он наверное подходит
на все 100%)


 
Карелин Артем ©   (2003-11-26 11:20) [5]

Строчка их ЭхЛиба:
if Assigned(Column.KeyList) and (Column.KeyList.Count > 0) then

Что будет, когда Column.KeyList=nil и мы проверяем условие Column.KeyList.Count ??
Будет банальный AV. И так сделан весь компонент :((((((((


 
Johnmen ©   (2003-11-26 11:43) [6]

>Что будет, когда Column.KeyList=nil

Будет Assigned(Column.KeyList)=False


 
Sandman25 ©   (2003-11-26 11:44) [7]

[6] Johnmen © (26.11.03 11:43)

Если $B-


 
Anatoly Podgoretsky ©   (2003-11-26 11:48) [8]

Карелин Артем © (26.11.03 11:20) [5]
Очень некрасиво написано.


 
Johnmen ©   (2003-11-26 11:49) [9]

>Sandman25 © (26.11.03 11:44)

Само сабой. Если кто-то и включает полное вычисление, то явно чего-то не то у него...:)


 
Anatoly Podgoretsky ©   (2003-11-26 11:53) [10]

Ну так если писать квалифицировано, то форма


if Assigned(Column.KeyList) then
if Column.KeyList.Count > 0 then


не вызовет никаких проблем при любой настройке полного вычисления


 
Sandman25 ©   (2003-11-26 11:56) [11]

[9] Johnmen © (26.11.03 11:49)

Согласен :)

[10] Anatoly Podgoretsky © (26.11.03 11:53)

Очень правильно. Но бывают более сложные случаи. Например: A and (B or C) or D and E. Если их раскрывать так же, то становится труднее понимать логику условия.


 
Anatoly Podgoretsky ©   (2003-11-26 11:59) [12]

Sandman25 © (26.11.03 11:56) [11]
Речь то про конкретный случай, а в частных случаях частное решение. Кроме того надо четко различать, то что делается для себя и то что как база для других, распространяемые компоненты надо писать особо тщательно, тем более сложные, потом же замучаешься на еподдержке.


 
Sandman25 ©   (2003-11-26 12:05) [13]

[12] Anatoly Podgoretsky © (26.11.03 11:59)

Точно. Автор мог был вставить $B- в начале каждой процедуры, где используются такие финты.


 
Карелин Артем ©   (2003-11-26 12:23) [14]

Sandman25 © (26.11.03 12:05) [13]
Автору надо еще кое-что вставить...
Я про код говорю...


 
Johnmen ©   (2003-11-26 12:27) [15]

Мужики, вы чего ? Гляньте исходники D. Там сплошь и рядом так пишется.
if (Value <> nil) and (Value.Height > 0) then


 
Johnmen ©   (2003-11-26 12:29) [16]

При этом опция компилятора B никак не выставляется...


 
Sandman25 ©   (2003-11-26 12:32) [17]

[16] Johnmen © (26.11.03 12:29)

Но используются DCU, откомпилированные при B-.

Значит, при изменении EhLib нужно сделать аналогично.

Вывод - те, кто ругают EhLib, не знают, как правильно с ним работать :)


 
Anatoly Podgoretsky ©   (2003-11-26 12:37) [18]

Johnmen © (26.11.03 12:27) [15]
Ну и что, пишут, а мы расхлебываем.
Знаешь что Жириновский про таких говорит :-)


 
Johnmen ©   (2003-11-26 12:38) [19]

>Sandman25 © (26.11.03 12:32)
>Вывод - те, кто ругают EhLib, не знают, как правильно с ним работать :)

Вот это верно !


 
Johnmen ©   (2003-11-26 12:39) [20]

>Anatoly Podgoretsky © (26.11.03 12:37)

:)))


 
Карелин Артем ©   (2003-11-27 11:36) [21]

>Вывод - те, кто ругают EhLib, не знают, как правильно с ним работать :)
Угу, а как насчет ошибки при сортировке запроса из хранимой процедуры этим самым компонентом?


 
Sandman25 ©   (2003-11-27 11:37) [22]

>Угу, а как насчет ошибки при сортировке запроса из хранимой процедуры этим самым компонентом?

Никак. Я никогда такое не использовал :)


 
Карелин Артем ©   (2003-11-27 11:45) [23]

Sandman25 © (27.11.03 11:37) [22]
Значит ты не умеешь им пользоваться :)

У вас винда работает без ошибок? А вы комп включать пробовали??


 
Sandman25 ©   (2003-11-27 11:49) [24]

>Значит ты не умеешь им пользоваться :)

А другой причины быть не может? Например, те СУБД, которые я использую, не поддерживают запросы вида select * from stored_proc :)


 
Карелин Артем ©   (2003-11-27 11:53) [25]

Там выражение Order by заполняется номерами полей, а не именами.


 
Sandman25 ©   (2003-11-27 12:12) [26]

[25] Карелин Артем © (27.11.03 11:53)

А разве не так надо?

select a from table
union
select b from table
order by имя_поля
Даже не будет работать в независимости от имя_поля.
А с номером - будет.


 
Карелин Артем ©   (2003-11-27 12:28) [27]

Sandman25 © (27.11.03 12:12) [26]
У меня в FB через номера запросы не проходят...


 
Sandman25 ©   (2003-11-27 12:32) [28]

[27] Карелин Артем © (27.11.03 12:28)

По стандарту SQL-92 нужны именно номера. Меняйте СУБД...
Шучу :) Я думаю, лучше переделать компонент, добавив еще одно поле UseFieldNameInOrderSection типа boolean


 
Карелин Артем ©   (2003-11-27 12:38) [29]

Sandman25 © (27.11.03 12:32) [28]
Судя по исходникам автор хотел сделать эту фичу настраиваемой, но потом забросил это дело.
Я лично при установке этого пакета сразу меняю чуть-чуть код для жесткой привязки к именам.


 
Sandman25 ©   (2003-11-27 12:41) [30]

[29] Карелин Артем © (27.11.03 12:38)

Тогда чего Вы обижаетесь на [17] Sandman25 © (26.11.03 12:32)
Похоже, что Вы-то умеете их использовать. А ругаете их за старые "заслуги", которые уже не используете :)


 
Карелин Артем ©   (2003-11-27 12:49) [31]

Да я вообще не обижаюсь, просто резок в суждении временами. Возраст такой.
Еще свежи в памяти моменты, когда проект с мегом исходников вдруг перестал загружаться по неизвестной причине и дельфи падала после каждой компилляции проекта на всех компах, куда я приносил проект просто из-за случайно поставленной галочки в опциях. Сколько нервов было потрачено и сколько пива выпито из-за гадкого настроения - не сосчитать.


 
Sandman25 ©   (2003-11-27 13:09) [32]

Понимаю. Старайтесь плохое прощать, а еще лучше забывать, здоровья больше сохраните. Впрочем, это уже offtopic.



Страницы: 1 вся ветка

Текущий архив: 2003.12.19;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.02 c
1-62086
lena19
2003-12-08 23:50
2003.12.19
перезапуск компа


1-62005
Yaro
2003-12-05 04:43
2003.12.19
Обработчик сообщений в Билдере


1-62121
Nata Kirhar
2003-12-08 11:23
2003.12.19
Просмоторщик для файлов word


14-62224
Jack
2003-11-26 12:45
2003.12.19
IIS и Jakarta-Tomkat


1-62112
Psi-factor
2003-12-08 10:22
2003.12.19
Webbrowser открыть страницу во фрейме