Страницы

вторник, 28 октября 2008 г.

Текучка 6. Delphi 2009 + FastMM4.9 + я = странный баг.

Я использую в своих проектах FastMM. При этом я не хочу добавлять путь до FastMM4.pas в Library Path, чтобы не мучиться при отладке. Для этого я создал фиктивный package FastMM.dpk(runonly), который включает в себя тольк Fastmm4.dpk и компилирую FastMM со всеми остальными package-ами. А проекты подключают к себе уже fastmm4.dcu. Но в Delphi 2009 эта схема перестала работать. При включении FastMM4.dcu в проект, Delphi начинает ругаться и обзывать меня обидным заморским прозвищем "[DCC Fatal Error] F2051 Unit FastMM4 was compiled with a different version of System.TObject.InstanceSize". Причём, ругается он только если я собираю проект с Debug Build Configuration. С Release всё собирается нормально. К слову сказать, ошибка “Unit бла-бла was compiled with a different version of бла-бла-бла” – одна из моих самых нелюбимых ошибок.

Начал писать пост в совершенной растерянности, не представляя с какой стороны взяться за проблему. Пока писал, пришла в голову мысль проверить, какое именно из различий между Debug и Release создаёт эту проблему.

Выяснилось, что проблема возникает, когда проект использует $(BDS)\Lib\Debug\ вместо $(BDS)\Lib\

А LazyDelphiBuilder, с помощью которого я и пересобираю все проекты, самой первой папкой для поиска исходников файлов всегда указывает $(BDS)\Lib\

С другими package-ами эту проблему повторить не получилось.

Получается, что System.TObject.InstanceSize в $(BDS)\Lib\ и $(BDS)\Lib\Debug разные.

Версия Дельфи: CodeGear™ Delphi® 2009  Version 12.0.3170.16989
Версия FastMM: Fast Memory Manager 4.90

Думаю, то ли разработчику FastMM написать, то ли в Quality Central, то ли вообще не заморачиваться и вписать путь до Fastmm4.pas в Library Path. А может не лениться и выяснить, откуда берётся $(BDS)\Lib\ в LazyDelphiBuilder-е?.. ;)

Update: Решил проблему созданием отдельных dcu файлов с отладочной информацией..



  • А вы знаете, сколько стоит отдать на аутсорсинг сопровождение 20 офисных компьютеров, 5 серверов и двух рабочих мест 1C? А я знаю. Тем более что цену ИТ аутсорсинга можно легко рассчитать на калькуляторе цен прямо на сайте аутсорсера.

7 комментариев:

  1. Привет! Слушай, а для чего вообще нужен в программе компонент FastMM? чем он помогает?

    ОтветитьУдалить
  2. кстати, я почитал про него, по идее он УЖЕ включён по-умолчанию в 2009...посёрфи

    ОтветитьУдалить
  3. Лёлик, FastMM существенно ускоряет работу программы. FastMM как менеджер памяти по умолчанию, включается, начиная с 2006-й версии Delphi.
    Но я привык использовать его явно.

    ОтветитьУдалить
  4. а ты фрилансишь или работаешь?

    ОтветитьУдалить
  5. Я столкнулся с таким же в EL:
    http://news.eurekalog.com/showthread.php?t=2167 (я там Yams, да это не мой аккаунт, но я с него часто пишу =)) ).

    Вроде в конце я уломал разработчиков на раздельные папки для Release и Debug - как в Delphi и JEDI.

    ОтветитьУдалить
  6. До этого случая я никак не мог понять, зачем нужно отдельно DebugDcu и ReleaseDcu. Теперь я вижу, что не все разработчики даже известных продуктов в курсе проблемы. =)

    ОтветитьУдалить