|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Очень странное AV!
Итак,при запуске программы вылезает AV по адресу 00000000
если нажать break,то открывается CPU на модуле ntdll ntdll.kernel32.RaiseException + 0x52 раньше вылезали AV с нормальными адресами,но там я ссылался на несозданные еще объекты,я переписал FormCreate на всех формах,но появилось вот это странное AV.После этого я запустил программу в режиме трассировки,первые две формы создались отлично,но 3 не захотела - компилятор выдал ошибку в project.dpr подчеркнув создание этой формы.если потом нажать продолжить то открывается CPU в котором идут адреса начиная от 00000000 и так очень много и все они имеют команды ?????. Никаких экстраординарных команд не использую,проверил все причины возникновения AV и ничего не нашел.Я даже создал на главной форме,которая запускается первой TApplicationEvent и в нем при ошибках E:=nil; НО и это не помогает,ПОМОГИТЕ ПОЖАЛУЙСТА,СКОРО НАДО ПРОГРАММУ ПРЕДСТАВЛЯТЬ,А ОНА ДАЖЕ НЕ ЗАПУСКАЕТСЯ!!! Извините,если переборщил с выделением... |
#2
|
|||
|
|||
Было такое при многоцветной иконке (TrueColor), но там программа все-таки дальше шла...
Какая винда, какая дельфя? |
#3
|
|||
|
|||
Цитата:
|
#4
|
||||
|
||||
Цитата:
После AV частенько показывает не там где произошло, а после и вверх по стеку. Надо постепенно заходить глубже пошагово ( F7, F8 ) |
#5
|
|||
|
|||
Цитата:
|
#6
|
|||
|
|||
Извини, а что ты там в FormCreate понаписал?
|
#7
|
||||
|
||||
Цитата:
F5 - это поставить прерывание на строку в редакторе кода. Если по F9 ( запуск в отладчике ) ошибка вышла раньше точки прерывания, надо поставить прерывание раньше или жать F8 (выполнить пошагово не заходя в процедуры ). Каждый раз выделяется строка которая будет исполнена на следующем шаге. Если на следующем шаге ошибка - ставим в этой строчке прерывание ( или после перезапуска опять жмем F8 до этой строчки ), затем вместо F8 жмем F7 ( пошагово с заходом в процедуры ) и попадаем уже во вложенную процедуру ( возможно не в создание не 3 формы а второй ). Там все повторяем с F8 - находим строчку в этой процедуре ( методе ) и так пока не дойдем до конкретной строчки. Обычно максимум 30 мин и дальше углубляться некуда - остается только посмотреть значения задействованных переменных ( полей ). Второй вариант - выложить код - посмотрим где и что. |
#8
|
||||
|
||||
Еще как вариант - можно попробовать выставить галочку "Use debug .dcus" пересобрать ( Build ) и запустить в отладчике. Если после AV остановится в стандартном модуле Delphi - пройтись по стеку.
Кстати какое значение OldCreateOrder у форм? |
#9
|
|||
|
|||
Цитата:
Причем я же написал,что я запустил прогу в режиме трассировки,первые две формы создались отлично,без ошибок,а вот на создании третей в project.dpr на строке создания ошибка AV,если нажать F7 то открывается CPU с адресами от 00000000 и все имеют значение ????? Я понимаю,что вы мне помогаете и я за это благодарен,но вы уж прям меня вообще в нубы записали,вы бы мне еще рассказали,как делфи запускать. Извините,конечно,но если я спрашиваю не в разделе новичков,значит тут действительно что-то странное,если мой учитель по информацинным технологиям,имеющий научное звание в этой области и все его друзья и мои друзья и друзья друзей не знают в чем дело. |
#10
|
|||
|
|||
Цитата:
|
#11
|
||||
|
||||
Цитата:
А на этой форме что затык OldCreateOrder True ? ( если да попробуй поменять ). Эту форму можно выдрать из проекта ? ( или тогда создается нормально ? ). Посмотреть бы "живьем", а то так получается только гадания. Еще несколько вопросов ( предположений ) - может что поможет. форма создается стандартно? ( Application.CreateForm(TForm1, Form1); ) Есть ли на ней сторонние компоненты, или попробовать по одному их убирать ( удаляя модули из uses ). Особенно сравни с первыми двумя формами, что в трейтьей есть чего нет в них. Вот так, например, можно получить AV по нулевому адресу: Код:
procedure TsomeForm_wnd.FormCreate(Sender: TObject); var nfe: TNotifyEvent; begin nfe := nil; nfe(self); end; Хотя если даже не доходит в FormCreate(Sender: TObject); что происходит при создании формы или компонентов или загрузки ресурсов. Не пререопределял Код:
constructor Create(AOwner: TComponent); override; или procedure Loaded; override; Не пробовал трассировку после : "Use debug .dcus" и пересобрать ( Build ). Хоть в стандартные модули ( Код:
procedure TApplication.CreateForm(InstanceClass: TComponentClass; var Reference); Пока больше не знаю что еще. |
#12
|
|||
|
|||
Цитата:
выдрать нельзя создавался в project.dpr,но терь создается в FormCreate главной формы,если значение в ини файле ровно false,однако она вообще не хочет терь создаваться насчет модулей:я оптимизирую прогу по полной,без ущерба удобности поэтому все неиспользуемые модули удаляю,раньше все запускалось,никаких компонентов не добавлял(на эту форму)(да там итак всего 5 имеджов и ничего больше на форме нет) |
#13
|
|||
|
|||
такая проблема:я убираю из project.dpr создание формы глюченной,и добавляю в FormCreate главной,запускаю - все идет отлично,никаких ошибок,только я сохраняю все изменения,запускаю проект,то вылетает ошибка ExternelException
|
#14
|
||||
|
||||
Попробуй удалить эти имеджи ( я так понимаю они с картинками ) - может испорчен dfm файл? или картинка какая-то вызывает глюк.
Еще, я пробовал тоже на 2009 кодить - может у меня попалась такая но глюки замучили - перешел на 2010, вроде пока более-менее. И еще, какой номер ExternelException ? |
#15
|
|||
|
|||
Цитата:
с имеджами все нормально,картиники тоже пояти с самого начала и месяц не вызывали никаких ошибок меня мурыжит в 2009 то,что он подчеркивает как ошибку все функции Application(ExeName,ProcessMessages,CreaeteForm... ) |