Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.01.14;
Скачать: [xml.tar.bz2];

Вниз

Опять Access violation   Найти похожие ветки 

 
petrovsky ©   (2006-12-20 14:21) [0]

Помогите найти причину ошибки. После очередной порции доработок возникла следующая ситуация. Программа компилируется нормально (Ctrl + F9). Ехе-файл создается нормально и работает нормально. А вот при попытке запустить программу из исходника (по F9) при вхождении в
Application.CreateForm(TForm1, Form1); выдает ошибку
"Access violation at adress 0041A07C in module Project1.exe. Write of adress CCE94BE4". И все. Все попытки найти причину пока не увенчались успехом.
Подскажите, пожалуйста, где и как искать.


 
Ega23 ©   (2006-12-20 14:24) [1]

Обращение к несуществующему (неправильному) адресу.


 
Mystic ©   (2006-12-20 14:28) [2]

Для начала сделать Search -> find error и ввести там 0041A07C


 
Petrovsky ©   (2006-12-20 14:38) [3]


> Mystic  [2]

Ну а дальше?. Его то и искать не надо - включил CPU view и любуйся. Только вот как этот ассемблер связать с программой в Delphi?


 
clickmaker ©   (2006-12-20 14:40) [4]


> petrovsky ©   (20.12.06 14:21)

включи use debug dcu, войди в Application.CreateForm( отладчиком и смотри


 
Ega23 ©   (2006-12-20 14:44) [5]

А ты уверен, что валится именно там, а не на TForm1.OnCreate каком-нибудь?


 
Petrovsky ©   (2006-12-20 14:56) [6]


> Ega23 [5]


Туда процесс не доходит. Первое же нажатие F7 на Application.CreateForm(TForm1, Form1)  и выдает ошибку.


> clickmaker [4]


Пробовал. Выдает эту же ошибку еще по нескольки адресам пока окончательно не прекратит весь процесс. А все то, что в окне для меня - китайская грамота. Подскажите, можно ли по этой информации определить причину ошибки.


 
BiN ©   (2006-12-20 15:01) [7]

У некоторых компонентов есть события, управление к которым переходит до выполнения OnCreate родительской формы. Например, OnChange в PageControl.


 
Сергей М. ©   (2006-12-20 15:02) [8]


> petrovsky ©   (20.12.06 14:21)



> Его то и искать не надо - включил CPU view и любуйся


Неумение пользоваться встроенным отладчиком "за отмазку не канает".


 
clickmaker ©   (2006-12-20 15:32) [9]


> [6] Petrovsky ©   (20.12.06 14:56)
>
> > Ega23 [5]
>
>
> Туда процесс не доходит. Первое же нажатие F7 на Application.CreateForm(TForm1,
> Form1)  и выдает ошибку

нажатие F7 должно впустить тебя внутрь CreateForm. Если этого не происходит, то либо у тебя debug dcu не включены, либо Application = nil


 
Anatoly Podgoretsky ©   (2006-12-20 15:35) [10]

> clickmaker  (20.12.2006 15:32:09)  [9]

Оно должно впустить и без debug dcu, особенно если перед эти включить CPU Window


 
Petrovsky ©   (2006-12-20 15:41) [11]


> clickmaker  [9]


Это вообще только начало проекта - создание первого модуля - DataModule. В этом то и вся трагедия - полностью остановилась разработка.


 
clickmaker ©   (2006-12-20 15:44) [12]


> [11] Petrovsky ©   (20.12.06 15:41)

а как это у тебя "Ехе-файл создается нормально и работает нормально"?
с одним ДатаМодулем? Что за приложение такое?


 
Petrovsky ©   (2006-12-20 15:59) [13]


> clickmaker  [12]


Да проект уже большой. Я имею в виду, что программа загибается в самом начале на создании первого модуля проекта, е не при создании какой-то формы уже внутри.


 
Сергей М. ©   (2006-12-20 16:02) [14]


> Petrovsky ©   (20.12.06 15:59) [13]


Ну так ты локализовал строчку Паскаль-текста, при выполнении которой происходит сабж ? рекомендацию [2] ты выполнил или нет ?


 
clickmaker ©   (2006-12-20 16:02) [15]


> [13] Petrovsky ©   (20.12.06 15:59)

см. [8]


 
Mystic ©   (2006-12-20 16:07) [16]

Итак, как вариант возможно то, что кто-то закрыл исключение блоком try..except, поэтому оно возникает при отладке, но его нет в релизе. Если это действительно так, то можно (а) просто его проигнорировать нажав F9 (б) Отключить остановку по исключению. Конечно, это очень ужасный стиль, но как я понял, тебя не интересует сермяжная правда, а нужен результат здесь и сейчас, а то, что через несколько дней работать с кодом станет невозможно, это несущественые детали.

Ну а если ты решил действительно установить причину access violation, то по секрету скажу, что характер ошибки указывает на то, что ты пользуешься непроинициализированым указателем (возможно повреждена область памяти, если ты используешь что-то низкоуровневое, вроде Move). Посему надо воспользоваться советами предыдущих ораторов и:
 (1) Почитать немного про указатели и память
 (2) Поразмыслить над прочитаным, сделать пару лабораторных работ
 (3) Установить флажок Use debug DCU
 (4) После исключения посмотреть место где оно возникло, поразмыслить над этим (по крайней мере судя по адресу, ошибка в коде VCL, а не внутри библиотек Windows, что хорошо)
 (5) Посмотреть на стек вызовов, может это подскажет тебе решение проблемы
 (6) Идти внутрь методов VCL по F7 до тех пор, пока не случится AV. Долго думать о причинах


 
Petrovsky ©   (2006-12-20 16:51) [17]

Вроде удалось установить источник. В последней доработке менял хранимую процедуру на сервере. Соответственно изменился состав полей в DataSet проекта и в сетке на форме - что-то убрал, что-то добавил. После этого глюк и возник. Видно где-то что-то осталось. Убрал DataSet и отключил форму - программа зашевелилась. Сейчас буду восстанавливать.
Всем спасибо.  Хотя, честно признаюсь, как связать содержимое окна CPU с текстом программы так и не разобрался.


 
Плохиш ©   (2006-12-20 17:02) [18]


> Хотя, честно признаюсь, как связать содержимое окна CPU
> с текстом программы так и не разобрался.

В окне CPU представлен код программы в в виде ассемблера.

PS. А Вашей фирме пора уже нанять программиста.


 
iZEN ©   (2006-12-20 23:02) [19]

Нету в Delphi провеяемых исключений, потому и грабли практически везде разложены.


 
tesseract ©   (2006-12-20 23:10) [20]


> В окне CPU представлен код программы в в виде ассемблера.
> PS. А Вашей фирме пора уже нанять программиста.


Давно ЧГ не сталкивался с необходимостью заглядывать в регистры при отладке.
Хотя как-то  пришлось побороться с "оптимизацией "  компилятором по занимаемой памяти.


> iZEN ©   (20.12.06 23:02) [19]


Raise + try...except вроде что-то проверяют :-)


 
ЮЮ ©   (2006-12-21 09:34) [21]

Это вообще только начало проекта - создание первого модуля - DataModule.

А в AfterOpen/Scroll какого нибудь DataSet-а стоит  Form1.Captin := ... , а Form1 в этот момент = nil;


 
Mystic ©   (2006-12-21 09:51) [22]

> Нету в Delphi провеяемых исключений

И как это может помочь?


 
evvcom ©   (2006-12-21 10:29) [23]

> [17] Petrovsky ©   (20.12.06 16:51)
> Хотя, честно признаюсь, как связать содержимое окна CPU
> с текстом программы так и не разобрался.

См. [2],[9] (debug dcu) + в окне CPU в контекстном меню есть еще "View Source"

> [10] Anatoly Podgoretsky ©   (20.12.06 15:35)
> Оно должно впустить и без debug dcu, особенно если перед
> эти включить CPU Window

Ну с CPU Window все ясно, но без "особенно" и без "debug dcu" меня не пускает. :)


 
Petrovsky ©   (2006-12-21 17:43) [24]

Ну вот и добрался до причины. Оказалось, такая реакция была на... идентификатор поля DataSet. Было "QRExp". Убрал две последних буквы и все заработало. Вот только хотел спросить у некоторых программистов (Плохиш ©   (20.12.06 17:02) [18]) как такой глюк можно выловить с помощью "кода программы в виде ассемблера"


 
Loginov Dmitry ©   (2006-12-21 20:09) [25]

> как такой глюк можно выловить с помощью "кода программы
> в виде ассемблера"


Также как и любой другой глюк.


 
iZEN ©   (2006-12-21 23:41) [26]


> Mystic ©   (21.12.06 09:51) [22]
>
> > Нету в Delphi провеяемых исключений
>
> И как это может помочь?

В 50 случаях из 100 ты не сможешь наступить на грабли. Физически. :)


 
tesseract ©   (2006-12-22 00:00) [27]


> как такой глюк можно выловить с помощью "кода программы
> в виде ассемблера"


Можно, но проще пошаговой отладкой.


 
evvcom ©   (2006-12-22 09:21) [28]

> [24] Petrovsky ©   (21.12.06 17:43)
> такая реакция была на... идентификатор поля DataSet

Это вообще элементарно ловится и без Window CPU в течение нескольких секунд, но с debug dcu. Еще должна галка стоять "Stop on Delphi Exception". Тогда при возникновении ошибки прога вывалится на DB.DatabaseError с параметром Message типа "Field MY_FUCKER_FIELD not found", смотришь стек (View -> Debug Windows -> Call Stack) и находишь вызов TDataSet.FieldByName("MY_FUCKER_FIELD "); (3-я строка) и щелкаешь по строке на одну ниже (4-я строка). Там и находишь в своем коде обращение к полю "MY_FUCKER_FIELD".


 
Petrovsky ©   (2006-12-22 10:18) [29]


> evvcom ©   (22.12.06 09:21) [28]

Да поле это было, и его идентификатор правильный. Вот только он почему-то не понравился Delphi. Пришлось его заменить в хранимой процедуре на сервере и, соответственно, в DataSet программы.


 
evvcom ©   (2006-12-22 10:20) [30]

> [29] Petrovsky ©   (22.12.06 10:18)
> Вот только он почему-то не понравился Delphi

Чудес не бывает. Видимо, ты с чем-то не разобрался.



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

Форум: "Прочее";
Текущий архив: 2007.01.14;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.015 c
15-1167016780
Австралия
2006-12-25 06:19
2007.01.14
Что на заставке Google делают кенгуру ?


2-1167026033
-=GAMBIT=-
2006-12-25 08:53
2007.01.14
ссылки на файлы


2-1166630378
ГореПрограммер
2006-12-20 18:59
2007.01.14
Работа с строками


15-1167067714
vasIZmax
2006-12-25 20:28
2007.01.14
Мнение


5-1146718409
MrShadow_
2006-05-04 08:53
2007.01.14
XPManifest





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский