2010-09-26 3 views
13

Я путаюсь, как к тому, что разница между компилятором и компоновщиком PDB FILES соответственно (т.е. в Visual Studio, Project Properties > C/C++ > Output Files > Program Database File NameпротивProject Properties > Linker > Debugging). Я попытался найти ответ онлайн, и до сих пор знаю (может быть, неправильно), что файл PDB компилятором генерируется для файлов obj, а файл PDB компоновщиком создается для двоичного (exe или dll) и является один используется для отладки.Компилятор PDB файла и компоновщик PDB файл

Если это неправда, объясните разницу. В любом случае, что делать, когда я создаю DLL, где у меня есть возможность выбрать файл PDB для компилятора, а также компоновщик и что делать, когда я создаю файл LIB, где только компилятор генерирует файлы PDB так как не выполняется никакого связывания.

Справочная информация: библиотеки/DLLs используются несколько проектов, которые затем нуждаются в PDB файлы для отладки. В случае файла lib нет двусмысленности, так как существует только один файл PDB. Но в случае с DLL, однако, мне нужны файлы PDB для правильной отладки или только тот, который сгенерирован компоновщиком?

ответ

12

Я честно не знаю, что именно файл .pdb генерируется на этапе компиляции используется для - я предполагаю, что это какая-то промежуточная информация получает втягивается в конечный файл PDB-компоновщика.

Однако нижняя строка заключается в том, что для целей отладки все, что вам нужно, это файл .pdb, созданный компоновщиком.


Update: Немного рытье сетчатого это от http://blogs.msdn.com/b/yash/archive/2007/10/12/pdb-files-what-are-they-and-how-to-generate-them.aspx:

Каких два типа .pdb файлов?

==============================

Есть два типа PDB файлов. Один , сгенерированный компилятором с именем VCx0.PDB (например, vc80.pdb), а другой .PDB.

Файл VCx0.PDB генерируется компилятором и связан с файлом .OBJ . Он содержит информацию о типе .

Файлы .pdb являются порожденную линкера и это связано с целевой исполняемый файл или в DLL. Этот файл содержит полную информацию об отладке . Когда мы отлаживаем , нам нужен этот файл .pdb для выравнивания по символам. Необходимо сопоставить временную метку целевого файла и PDB .

+0

(Опубликовано это до вашего обновления, но это относится к обновлению, а) Так что, когда я создаю 'lib' файл (то есть статическая библиотека), и только компилятор может генерировать' PDB 'file, поскольку компоновщик больше не нужен, значит ли это, что теперь файл' pdb', сгенерированный компилятором, является тем, который необходим для отладки? – Samaursa

+1

.lib-файлы не участвуют в выполнении или отладке программы. Это всего лишь вход для компоновщика. Соответствующий «материал» в файле lib либо делается частью двоичного файла (в случае статической библиотеки), либо используется для создания динамических ссылок на библиотеки DLL (в случае библиотеки импорта). В любом из этих случаев файл .pdb, который вам нужен для отладки, является тем, который создается компоновщиком при создании фактического файла .exe или .dll. –

+1

Отлично, спасибо за разработку Майкла, я продолжу и проверю это как правильный ответ. Хотя, поскольку мы на этот вопрос, если вы можете ответить на это. Havok SDK статически связан, и все его библиотеки поставляются с соответствующими файлами 'PDB'. Интересный бит заключается в том, что если вы связываете библиотеки с файлами 'PDB', сопровождающими их в том же каталоге, то Visual Studio дает массу предупреждений о том, что' Debug info отсутствует, компиляция, как будто информация об отладке не предоставляется' (я перефразируя) – Samaursa

Смежные вопросы