Файлы PDB в папках VisualStudio bin \ debug - PullRequest
10 голосов
/ 25 сентября 2008

У меня есть решение VS (2008), состоящее из нескольких проектов, не все в одном пространстве имен. Когда я создаю решение, все библиотеки, используемые проектом верхнего уровня TopProject , копируются в папку TopProject \ bin \ debug . Однако соответствующие файлы .pdb копируются только для некоторых других проектов. Это боль, например, при использовании NDepend .

Как VS решает, какие файлы .pdb скопировать в папки bin \ debug более высокого уровня? Как я могу заставить VS копировать другие?


Edit:

Ссылки следующие: все библиотеки скопированы в центральное место без их pdbs. TopProject только имеет ссылки на эти скопированные dll; Однако сами библиотеки, очевидно, знают, где находятся их pdbs, и (большинство из них) правильно копируются в папку отладки.

Ответы [ 4 ]

11 голосов
/ 25 сентября 2008

С MSDN :

Содержит файл базы данных программы (PDB) отладка и состояние проекта информация, которая позволяет постепенно связывание конфигурации отладки ваша программа. Файл PDB создан когда вы компилируете программу C / C ++ с / ZI или / Zi или Visual Базовая / C # / JScript .NET программа с /debug.

Таким образом, похоже, что «проблема» здесь (из-за отсутствия лучшего слова) заключается в том, что некоторые из ваших DLL создаются в режиме отладки (и, следовательно, испускают PDB), а некоторые - в режиме выпуска (следовательно, не испуская PDBs). Если это так, это должно быть легко исправить - зайдите в каждый проект и обновите его настройки сборки. Это будет сценарий по умолчанию, если вы еще не настроили параметры командной строки.

Тем не менее, будет сложнее, если это не так. Может быть, вы все в режиме выпуска или отладки. Теперь вам нужно посмотреть параметры компиляции командной строки (указанные в свойствах проекта) для каждого проекта. Измените их на / debug соответственно, если вы хотите отладчик, или удалите его, если вы этого не сделаете.

Правка в ответ на правку

Да, библиотеки DLL "знают", что у них есть PDB, и у них есть пути к ним, но это не так уж много значит. Копирование только DLL в определенный каталог, как уже упоминалось, не решит эту проблему. Вам также нужны PDB.

Копирование отдельных файлов в Windows, за исключением определенных файлов типа «связка» (я не использую термин Microsoft для этого, но понятие «полные пакеты HTML») не копирует связанные файлы. Библиотеки DLL не собираются "в комплекте", поэтому их копирование оставляет свою PDB позади.

Я бы сказал, что единственный ответ, который вы получите, - это обновить ваш процесс доставки библиотек DLL в эти центральные местоположения и включить PDB ... Хотя я бы хотел оказаться ошибочным в этом!

3 голосов
/ 25 сентября 2008

Как уже говорилось в других сообщениях, у вас может быть проблема с компилятором / повреждением.

Но, как сказал Уилл, если файлы pdb создаются, но не отображаются там, где вы хотите, создайте шаг после сборки. Вот шаг после сборки, который я определяю для каждого проекта в моем решении. Он гарантирует, что все выходные файлы скопированы в общий каталог.

Если ваш proj-файл находится в \ SolutionDir \ ProjDir, то в первой строке шага после сборки будут скопированы выходные файлы в \ Solution \ Bin \ Release или \ Solution \ Bin \ Debug. Вторая строка копирует файл pdb, если это сборка Debug. Я не копирую файл pdb для сборок релиза.

Итак, \ SolutionDir \ Bin теперь содержит все ваши выходные файлы в одном месте.

xcopy /r /y $(TargetPath) $(ProjectDir)..\$(OutDir)
if $(ConfigurationName) == Debug xcopy /r /y $(TargetDir)$(TargetName).pdb $(ProjectDir)..\$(OutDir)
2 голосов
/ 25 сентября 2008

При чистке раствора проверяйте, действительно ли он очищен. Я видел, как VS оставлял файлы в папках bin \ debug даже после очистки. Удалите каталог bin \ debug во всех ваших проектах и ​​перестройте.

2 голосов
/ 25 сентября 2008

Во-первых, никогда ничего не предполагайте. Очистите решение, перестройте его в режиме отладки и проверьте, созданы ли все файлы pdb. Если нет, то это ваша проблема.

Если они созданы, и их копируют не все, вы можете обойти это, создав событие post build, которое вручную копирует файлы pdb в нужные места. Это просто обходной путь, конечно.

Единственное, о чем я могу думать, это о том, что файл вашего решения поврежден. Вы можете открыть свой .sln в виде XML-файла и проверить его содержимое. Проверьте конфигурацию для проектов, которые работают как ожидается, и сравните их с теми, которые не работают. Если вы ничего не видите, вы должны повторить это на уровне проекта. Сравните рабочие .csproj (или любые другие) файлы проекта и нерабочие.


Изменить в ответ на редактирование :

Если вы просто копируете вещи вручную, скопируйте также и файлы pdbs. Я полагаю, что Dll не должен ничего знать о pdbs. Просто вставьте их в каталог назначения и идите выпить чашку кофе. Relax.

...