Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Очень странное срабатывание секции INITIALIZATION


Страницы:   1 2 3

IGray ©   (2009-03-10 12:16:00) 

Есть модуль. В нём одна процедура и секция инициализации.
Ставлю точки остановки на первую строчку в процедуре и первую строчку секции инициализации. Запускаю (F9).
Управление сначала попадает В ПРОЦЕДУРУ!!! И только потом - В СЕКЦИЮ ИНИЦИАЛИЗАЦИИ!

Вопрос: как такое вообще возможно?? В какой ситуации???

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

Считал, что секция инициализации по определению вызывается первой ВСЕГДА!

Очень интересно мнение профессионалов!


SPeller   (2009-03-18 07:52:00) [1]

Если в функцию (функции) вставить условие
if not RoutineInitialized then
  InitializeRoutine;

то можно избавиться вообще от секции инициализации и не париться про порядок вызова оных при старте. Если не охота плодить условия в функциях, то можно эти 2 строки вынести во внутреннюю функцию и вызывать уже ее. Лишняя строка читабельность кода не повредит.


Тын-Дын   (2009-03-12 15:15:00) [2]


> Считал, что секция инициализации по определению вызывается
> первой ВСЕГДА!


Естественно всегда!

Но если в проекте несколько модулей, в каждом есть секция инициализации, то все эти секции выполняются в порядке указания модулей в USES.
Соответственно, если в секции инициализации одного модуля вызывается некая процедура(из этого модуля или из другого - неважно), то эта процедура выполнится до того, как начнётся выполняться инициализация следующих по порядку модулей.

Вроде бы здесь всё логично и вопросо не должно возникать?


Дмитрий Белькевич   (2009-03-11 23:56:00) [3]

>Думаю это уже слишком, т.к. инициализация модулей БЕЗ циркулярных референсов выполняется совершенно спокойно и однозначно...

Увидел.


IGray   (2009-03-11 23:41:00) [4]

Кол-стек в какой точке?
На какой вопрос Вы ищете ответ?
Я со своим вроде разобрался.. см. IGray  (11.03.09 13:16) [37]
Если нужно - поясню подробнее.


Дмитрий Белькевич   (2009-03-11 22:47:00) [5]

Как всё таки насчет того, что бы колл-стэк посмотреть? С включенными дебажными либами?


Anatoly Podgoretsky   (2009-03-11 19:44:00) [6]

> Rouse_  (11.03.2009 16:09:50)  [50]

Налицо сговор, один пилит, а вторая допиливает :0)


Palladin   (2009-03-11 16:15:00) [7]

Удалено модератором
Примечание: больше не буду


Игорь Шевченко   (2009-03-11 16:14:00) [8]

Jedi Code Formatter с исходниками - рулез фарева. Там готовый парсер


Rouse_   (2009-03-11 16:09:00) [9]

Стукни в аську, в профиле - так проще будет, вдвоем быстрее доведем, а то я в одиночку неделю телепаться буду, если не больше :)


Riply   (2009-03-11 15:54:00) [10]

> [48] Rouse_ ©   (11.03.09 15:44)
> Я тебе краткое направление дам

Спасибо :)
Но я пока повременю в бой бросатmся - подожду твоих исходников :)


Rouse_   (2009-03-11 15:44:00) [11]

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

У меня все это чиститься за исключением вот таких конструкций:
   {$IF Defined(DEBUG) and Defined(LINUX)} bla..bla {$IFEND}
   {$IF sizeof(Integer) = 4} bla..bla {$IFEND}
   (*$DEFINE TEST *)
   (*$IFDEF TEST *) bla..bla (*$ENDIF*)


Riply   (2009-03-11 15:37:00) [12]

> [45] Riply ©   (11.03.09 15:22)

Сейчас у меня даже получение списка файлов проекта
до конца не реализовано. Споткнулась на конструкциях типа:

{$IFDEF SOME_CONDITION}
{$INCLUDE ..\..\..\MySuperPuper.pas}
{$ENDIF}

т.к. еще не научилась определять "продефайнено" ли здесь(в данном месте данного юнита) SOME_CONDITION или нет.


Rouse_   (2009-03-11 15:35:00) [13]

Надо, значит допилю :)


Riply   (2009-03-11 15:22:00) [14]

> [44] Rouse_ ©   (11.03.09 14:55)
> Если кому нужно будет - то в могу чуть подправить и выложить полностью с исходниками.

"Надо, Саша, надо" (с) Почти дословная :)
Очень надо.
Пару дней назад прижало и сама начала писать что-то типа dpr - "парсилки".
А тут такая удача. Так что давай "подправляй и выкладывай полностью с исходниками".
:)


Rouse_   (2009-03-11 14:55:00) [15]

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


Rouse_   (2009-03-11 14:53:00) [16]

А она умеет только от 2006-ой дельфи и выше проекты кушать :)


Servy   (2009-03-11 14:40:00) [17]

> Не скажу что у меня прямтаки удобное, я его просто банально
> не довел до конца, т.к. нет времени, а по моим прикидкам
> чтобы довести это дело до ума нужно месяца три.
> Для работы использовали эту утилитку несколько раз чтоб
> понять откуда ноги растут у того или иного модуля, нам в
> принципе для небольшого рефакторинга хватило.
> Воть: 1.4Мб
> http://rouse.drkb.ru/other/unitweb.zip


У меня почему-то не работает :(. "List index out of bounds (-1)" после открытия любого dpr'а, в частности самого простого с одной формой, специально созданного для этого в Delphi 7. И никаких графиков и списков как на скриншоте не появляется. С какой стороны подкрутить, чтобы заработало? ^^


IGray   (2009-03-11 14:31:00) [18]

Спасибо! Очень любопытная тулзовина!
Жаль, что мой проект не переварила...
За инфу про ModelMaker тоже спасибо!


Rouse_   (2009-03-11 13:46:00) [19]

Ну и картиночка: http://rouse.drkb.ru/other/uw.gif


Rouse_   (2009-03-11 13:40:00) [20]

Не скажу что у меня прямтаки удобное, я его просто банально не довел до конца, т.к. нет времени, а по моим прикидкам чтобы довести это дело до ума нужно месяца три.
Для работы использовали эту утилитку несколько раз чтоб понять откуда ноги растут у того или иного модуля, нам в принципе для небольшого рефакторинга хватило.
Воть: 1.4Мб
http://rouse.drkb.ru/other/unitweb.zip


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо