Debug info & размер бинарника

Тема в разделе "WASM.WIN32", создана пользователем green, 16 авг 2004.

  1. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    Есть набор obj файлов которые собираются в dll: один раз с включенной опцией линкера /debug, второй раз - без неё.

    В первом случае получается размер бинарника ~164К, во втором - ~139К. Т.е. разница ~24К. Посмотрел бинарники - у первого размеры всех секций больше, особенно .text.



    Вопрос: что такого напихивает линкер в бинарник, кроме ссылки на pdb файл, в режиме /debug ?



    для построения obj и dll использованы компилятор и линкер от MS VC++ 6.0.



    Спасибо.
     
  2. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    The /DEBUG option creates debugging information for the .exe file or DLL.



    The linker puts the debugging information into a program database (PDB). It updates the PDB during subsequent builds of the program.



    An .exe file or DLL created for debugging contains the name and path of the corresponding PDB. The debugger reads the embedded name and uses the PDB when you debug the program. The linker uses the base name of the program and the extension .pdb to name the program database, and embeds the path where it was created. To override this default, set /PDB and specify a different file name.



    The compiler's Line Numbers Only (/Zd) or C7 Compatible (/Z7) option causes the compiler to leave the debugging information in the .obj files. You can also use the Program Database (/Zi) compiler option to store the debugging information in a PDB for the .obj file. The linker looks for the object's PDB first in the absolute path written in the .obj file, and then in the directory that contains the .obj file. You cannot specify an object's PDB file name or location to the linker.



    /INCREMENTAL is implied when /DEBUG is specified.



    А вообще, немножко некорректно задан вопрос. Усилия линкера, в общем-то, не столь и велики по сравнению с усилиями компилятора. Вот компилятор в отладочную версию СТОЛЬКО всего сует, что можно одуреть. А забота линкера тут - помогать отладчику.
     
  3. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine


    Да. Но в моем случае перекомпиляция obj не производится!

    Только линковка и вся разница - опция /debug.
     
  4. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    green



    Попробуйте указать /OPT:NOWIN98

    У меня щас нет 6го линкера что бы проверить, но вроде эта опция унего не совместима с режимом /debug





    PS

    Эх, сколько всяких упоминаний про этот .PDB в MSDN, и хоть какое-нибудь описание!

    Я пока только кое-что у Шрайбера нашел, и то формат 2.0, а щас уже MSF 7.00 :dntknw:

    А google ссылки на какой-то protein data bank выдаёт %)
     
  5. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    А google ссылки на какой-то protein data bank выдаёт %)



    Но-но! Железячник хренов, не оскорбляй мой PDB. У него есть неплохие симпотные картинки кристаллической решетки :)
     
  6. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    А что касается PDB, то есть pdbdump, который опирается на PDB-парсер от самой MS. Ты в тулзы смотрел?
     
  7. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    S_T_A_S_

    я попробовал Вашу опцию. Размер бинарника уменьшился (за счет уменьшения выравнивания секций в файле).

    Но разница в размере между двумя режимами линковки осталась существенной, хотя и уменьшилась.
     
  8. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    volodya



    По моему до меня дошло! :)
     
  9. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    Странно только зачем ему так нужен INCREMENTAL для генерации debug info.



    Интересно, бинарники от Windows free build (сгенеренные с debug info) тоже что ли linked incrementally ?

    Что-то сомнительно...
     
  10. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    volodya



    Дык, мне не готовый PDB нужно обрабатывать, а самому его создавать. Какой-нибудь упрощенный вариант, вроде того что по /Zd генерится. Эмпирический метод рулит, но боюсь он не очень быстрый :dntknw:
     
  11. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    А SDK от MS этого не умеет, что ли?
     
  12. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    S_T_A_S_





    Я тоже подумывал, как бы оформить результаты исследования бинарника в IDA в виде pdb файла.
     
  13. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Я тоже подумывал, как бы оформить результаты исследования бинарника в IDA в виде pdb файла



    Для этого есть плагины, которые доступны с сылок в соответствующем разделе тулзов.
     
  14. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    volodya

    простите, что-то не нашёл я такого плагина.

    Есть для импорта символьной информации из pdb в базу, есть для экспорта из базы в nms.
     
  15. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    volodya >




    Судя по MSDN - нет. Извлекать инфу - без проблем..

    mspdb71.dll экспортирует кучу COM методов, некоторые из которых судя по всему служат для создания PDB файл, но с ними ещё нужно разбираться..





    ЗЫ

    Вот нашёл маленькое дополнение к Шрайберу: http://www.jorgon.freeserve.co.uk/Other/pdb.htm
     
  16. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Если у тебя нет компиляции OBJ в DEBUG/RELEASE тогда нет нужды заниматься опциями линковки - самый большой выигрыш размера получаем при полном сборе бинарника. Также есть ещё и оптимизатор! Оптимизированный код нелегко даже узнать в дебаггере...
     
  17. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    У меня obj скомпилены с необходимой оптимизацией и с генерацией debug info. Хотелось бы получить релизную dll, которая позволяет "символьную" отладку, и при том по возможности без разрастания размера бинарника.



    Конечно, дебажить оптимизированный код трудно, но иногда это единственный выход.
     
  18. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    вот ответ на мой вопрос, если кому интересно:



    Enabling /debug linker option changes the default /opt:ref to /opt:noref,

    thus disabling that kind of size optimizations.

    (C) Oleg Starodumov