Конференция "Основная" » Очень странное срабатывание секции INITIALIZATION
 
  • Rouse_ © (11.03.09 13:46) [40]
    Ну и картиночка: http://rouse.drkb.ru/other/uw.gif
  • IGray (11.03.09 14:31) [41]
    Спасибо! Очень любопытная тулзовина!
    Жаль, что мой проект не переварила...
    За инфу про ModelMaker тоже спасибо!
  • Servy © (11.03.09 14:40) [42]
    > Не скажу что у меня прямтаки удобное, я его просто банально
    > не довел до конца, т.к. нет времени, а по моим прикидкам
    > чтобы довести это дело до ума нужно месяца три.
    > Для работы использовали эту утилитку несколько раз чтоб
    > понять откуда ноги растут у того или иного модуля, нам в
    > принципе для небольшого рефакторинга хватило.
    > Воть: 1.4Мб
    > http://rouse.drkb.ru/other/unitweb.zip


    У меня почему-то не работает :(. "List index out of bounds (-1)" после открытия любого dpr'а, в частности самого простого с одной формой, специально созданного для этого в Delphi 7. И никаких графиков и списков как на скриншоте не появляется. С какой стороны подкрутить, чтобы заработало? ^^
  • Rouse_ © (11.03.09 14:53) [43]
    А она умеет только от 2006-ой дельфи и выше проекты кушать :)
  • Rouse_ © (11.03.09 14:55) [44]
    Если кому нужно будет - то в могу чуть подправить и выложить полностью с исходниками. Дома в принципе семерка стоит, под нее можно будет допилить...
  • Riply © (11.03.09 15:22) [45]
    > [44] Rouse_ ©   (11.03.09 14:55)
    > Если кому нужно будет - то в могу чуть подправить и выложить полностью с исходниками.

    "Надо, Саша, надо" (с) Почти дословная :)
    Очень надо.
    Пару дней назад прижало и сама начала писать что-то типа dpr - "парсилки".
    А тут такая удача. Так что давай "подправляй и выкладывай полностью с исходниками".
    :)
  • Rouse_ © (11.03.09 15:35) [46]
    Надо, значит допилю :)
  • Riply © (11.03.09 15:37) [47]
    > [45] Riply ©   (11.03.09 15:22)

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

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

    т.к. еще не научилась определять "продефайнено" ли здесь(в данном месте данного юнита) SOME_CONDITION или нет.
  • Rouse_ © (11.03.09 15:44) [48]
    Я тебе краткое направление дам - сначала определи все дефайны проекта, включая глобальные, потом определи места откуда до кода дефайн включен, потом вычисти все комментарии в тексте, при этом важно отличать дефайн от комментария типа {}, потом удали весь текст в выключеных дефайнах и после этого получишь чистый текстовик который можно элементарно парсить..

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

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

    Спасибо :)
    Но я пока повременю в бой бросатmся - подожду твоих исходников :)
  • Rouse_ © (11.03.09 16:09) [50]
    Стукни в аську, в профиле - так проще будет, вдвоем быстрее доведем, а то я в одиночку неделю телепаться буду, если не больше :)
  • Игорь Шевченко © (11.03.09 16:14) [51]
    Jedi Code Formatter с исходниками - рулез фарева. Там готовый парсер
  • Palladin © (11.03.09 16:15) [52]
    Удалено модератором
    Примечание: больше не буду
  • Anatoly Podgoretsky © (11.03.09 19:44) [53]
    > Rouse_  (11.03.2009 16:09:50)  [50]

    Налицо сговор, один пилит, а вторая допиливает :0)
  • Дмитрий Белькевич © (11.03.09 22:47) [54]
    Как всё таки насчет того, что бы колл-стэк посмотреть? С включенными дебажными либами?
  • IGray (11.03.09 23:41) [55]
    Кол-стек в какой точке?
    На какой вопрос Вы ищете ответ?
    Я со своим вроде разобрался.. см. IGray  (11.03.09 13:16) [37]
    Если нужно - поясню подробнее.
  • Дмитрий Белькевич © (11.03.09 23:56) [56]
    >Думаю это уже слишком, т.к. инициализация модулей БЕЗ циркулярных референсов выполняется совершенно спокойно и однозначно...

    Увидел.
  • Тын-Дын © (12.03.09 15:15) [57]

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


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

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

    Вроде бы здесь всё логично и вопросо не должно возникать?
  • SPeller © (18.03.09 07:52) [58]
    Если в функцию (функции) вставить условие
    if not RoutineInitialized then
      InitializeRoutine;


    то можно избавиться вообще от секции инициализации и не париться про порядок вызова оных при старте. Если не охота плодить условия в функциях, то можно эти 2 строки вынести во внутреннюю функцию и вызывать уже ее. Лишняя строка читабельность кода не повредит.
 
Конференция "Основная" » Очень странное срабатывание секции INITIALIZATION
Есть новые Нет новых   [118241   +25][b:0][p:0.001]