Статическая библиотека отладочные символы



в VS2010 есть возможность генерировать отладочную информацию для exes / DLL в разделе линкер но нет такой опции в разделе библиотекарь для libs. Отладочная информация встроена в статическую библиотеку?



есть опция в C / C++ свойства Имя Файла Базы Данных Программы для библиотек и EXE, и DLL. По умолчанию он переходит в мой промежуточный каталог и называется именем проекта для библиотек, но называется vc$(PlatformToolsetVersion).ГКБ для бывших/DLL файлов. Что такое pdb из этого параметра и чем он отличается от pdb в опции компоновщика?



Если я предоставляю библиотеку с библиотеками и заголовками, как я могу предоставить отладочные символы пользователю моей библиотеки?

535   5  

5 ответов:

если вы используете /ZI или /Zi (C/C++ ->General ->Debug Information Format), то , который содержит отладочную информацию для всех файлы. Если поочередно вы используете /Z7, отладочная информация будет встроена в .obj файл, а затем встроенный в .lib. Это, вероятно, самый простой способ распространения отладочной информации для статическая библиотека.

Я бы не советовал распространять статическую библиотеку, однако, так как это обычно привязывается к определенной версии компилятора.

расширение на предыдущие ответы, для тех, кто нуждается в полном how-to (VS 2013).

обратите внимание, что это должно касаться комментариев ^^выше относительно вопросов VS2013.

Метод 1: База Данных Программы (.pdb) путь (/Zi или /ZI)

  1. Статический Проект Lib:создайте pdb с тем же именем, что и ваша статическая lib:

    • открыть Solution Explorer с .
    • Правой Кнопкой Мыши ваш статический проект lib, выберите Properties
    • Edit Configuration Properties ->C/C++ ->General ->Debug Information до /Zi или /ZI
      • обратите внимание, что /ZI позволяет" редактировать и продолжать " редактирование во время отладки
    • Edit Configuration Properties ->C/C++ ->Output Files ->Program Database File Name до $(OutDir)$(TargetName).pdb
    • теперь скомпилируйте его, и обратите внимание, где YourLib.lib и YourLib.pdb имеют.
  2. Приложения Проекта: ссылка на исполняемый файл со статической библиотекой и новым PDB-файлом:

    • снова перейдите к свойствам проекта, но на этот раз для вашего проекта приложения
    • опять же, редактировать Debug Information свойство по мере необходимости.
    • Edit Configuration Properties ->Linker ->General ->Additional Library Directories, добавив свой собственный каталог "libs" или любой каталог, который вы планируете сохранить/скопировать свой YourLib.lib и YourLib.PDB-файл.
    • Edit Configuration Properties ->Linker ->Input ->Additional Dependencies добавление YourLib.lib (нет пути в фронт)
    • скопировать как YourLib.Либ и YourLib.ГКБ в каталог, указанный выше.

Метод 2: встроенные символы (нет .pdb) Way (/Z7)

  1. Статический Проект Lib:создание статической библиотеки со встроенными отладочными символами

    • как и в методе 1, Перейдите к свойствам проекта
    • как в методе 1, измените свой Debug Information,но на этот раз/Z7
    • как и в методе 1, скомпилируйте и обратите внимание, где YourLib.lib генерируется.
  2. Приложения Проекта: свяжите исполняемый файл со статической библиотекой

    • как и в методе 1, Перейдите к свойствам проекта
    • как и в методе 1, измените свой Debug Information при необходимости
    • как и в методе 1, edit Additional Library Directories
    • как в методе 1, редактировать Additional Dependencies
    • теперь скопируйте YourLib.lib в каталог, указанный в Additional Library Directories

Обсуждение:

  • преимущества Z7? это проще, и "один файл" способ сделать это. Вся отладочная информация находится в файле lib.
  • недостатки Z7? размер файла на диске, время ссылки, несовместимый с функцией" минимальное восстановление " (/Gm),тут не разрешить "редактировать и продолжать", старый формат (например, старая парадигма)
  • почему бы мне не указать Debug Information настройка для проекта приложения? это сообщение связано с тем, как заставить отладку работать в статическом коде lib. Тот же самый выбор" метод 1 против метода 2 " применяется и для проекта приложения.

Я заметил, что в VS2013 можно установить имя файла базы данных программы на вкладке выходные файлы C/C++. Изменение его от значения по умолчанию на что-то вроде $(OutDir)$(TargetName).ГКБ решает проблему

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

Если программа, которая их использует, использует символы отладки, скомпилированный код библиотеки в этой программе также будет иметь символы.

PDB информация из Википедии:

когда символы отладки встроены в сам двоичный файл, файл может затем вырастают значительно крупнее (иногда на несколько мегабайт). К избегайте этого дополнительного размера, современных компиляторов и ранней отладки мэйнфреймов системы выводят символьную информацию в отдельный файл; для Компиляторы Microsoft, этот файл называется PDB-файл.

странное поведение в VS2012. Строительство с нуля (или с /вариант в nmake) будет производить .PDB-файл. Теперь удалите его .lib и .pdb и rerun nmake (без /A конечно, чтобы запустить только ссылку) и нет .выводится pdb-файл.

Comments

    Ничего не найдено.