Статическая библиотека отладочные символы
в VS2010 есть возможность генерировать отладочную информацию для exes / DLL в разделе линкер но нет такой опции в разделе библиотекарь для libs. Отладочная информация встроена в статическую библиотеку?
есть опция в C / C++ свойства Имя Файла Базы Данных Программы для библиотек и EXE, и DLL. По умолчанию он переходит в мой промежуточный каталог и называется именем проекта для библиотек, но называется vc$(PlatformToolsetVersion).ГКБ для бывших/DLL файлов. Что такое pdb из этого параметра и чем он отличается от pdb в опции компоновщика?
Если я предоставляю библиотеку с библиотеками и заголовками, как я могу предоставить отладочные символы пользователю моей библиотеки?
5 ответов:
если вы используете
/ZIили/Zi(C/C++->General->Debug Information Format), то , который содержит отладочную информацию для всех файлы. Если поочередно вы используете/Z7, отладочная информация будет встроена в.objфайл, а затем встроенный в.lib. Это, вероятно, самый простой способ распространения отладочной информации для статическая библиотека.Я бы не советовал распространять статическую библиотеку, однако, так как это обычно привязывается к определенной версии компилятора.
расширение на предыдущие ответы, для тех, кто нуждается в полном how-to (VS 2013).
обратите внимание, что это должно касаться комментариев ^^выше относительно вопросов VS2013.
Метод 1: База Данных Программы (.pdb) путь (/Zi или /ZI)
Статический Проект 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 имеют.
Приложения Проекта: ссылка на исполняемый файл со статической библиотекой и новым 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)
Статический Проект Lib:создание статической библиотеки со встроенными отладочными символами
- как и в методе 1, Перейдите к свойствам проекта
- как в методе 1, измените свой
Debug Information,но на этот раз/Z7- как и в методе 1, скомпилируйте и обратите внимание, где YourLib.lib генерируется.
Приложения Проекта: свяжите исполняемый файл со статической библиотекой
- как и в методе 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