2012-06-19 2 views
13

Я использую, чтобы всегда смотреть на окончательный исполняемый файл или dll после отладки и создания файла с любой IDE. Теперь я пытаюсь Visual C++ 2010, в поисках лучшей версии, без мусора или ненужных ссылок. Итак, я создал новое решение с двумя проектами: исполняемый файл и его dll. VC++ создал много промежуточных файлов между кодом и окончательным файлом. Я открыл файл .exe и .dll с шестнадцатеричным редактором и увидел что-то, что мне не нравится. Где-то внутри файла есть абсолютный путь к файлу .PDB.Удалить ссылки PDB из выпущенного файла

Почему? Как удалить его из VC++?

Для этого должна быть какая-то предварительная команда. Каково использование абсолютного пути к файлу .PDB, например «D: \ My Projects \ Project1 \ Release \ Project1.pdb» внутри двоичного файла файла, который будет распространяться на компьютерах с разными папками? Кроме того, мне не нравится видеть один из маршрутов моего диска, сохраненный внутри двоичного файла, который я хочу поделиться с другими людьми. Я в режиме Release, я не вижу использования этой ненужной информации. Как я могу удалить его? Благодаря!

+0

Возможный дубликат этого [вопрос] [1]? Вы можете удалить путь к PDB. Но, пожалуйста, держите ссылку на PDB. [1]: http: // stackoverflow.com/questions/7596628/strip-the-path-to-the-pdb – mox

ответ

7

Прочитайте документацию PDB Files на MSDN:

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

В Visual C++ параметр/Fd указывает файл PDB, созданный компилятором. Когда вы создаете проект в Visual Studio с помощью мастеров, параметр/Fd устанавливается для создания PDB с именем project.PDB.

Обратите внимание, что абсолютный путь упоминается в документации:

Visual Studio отладчик использует файл project.PDB созданный линкера непосредственно и встраивает абсолютный путь к PDB в EXE или DLL-файл.

Вы всегда можете пойти в Project Properties> Linker> Debugging> Generate Debug Info и установить его к №

+0

Странно, что даже если я нахожусь в режиме Release, файлы .PDB все еще сгенерированы. Спасибо за ваш ответ – ali

+0

@ali: Это значение по умолчанию при создании нового проекта. Однако вы всегда можете отключить его. Обратите внимание, что PDB требуется только для * отладки * и * инкрементной привязки *, и вам не нужно его отправлять (если вы не хотите, чтобы ваши клиенты могли отлаживать). – dirkgently

+3

O.K. Благодаря! Теперь я изменился, и он работает! Я ненавижу видеть строки, обнаруженные в двоичном коде! – ali

9

Вы можете использовать /pdbpath:none удалить полное квалифицированное имя пути PDB файла, но сохранить имя и расширение PDB. Сохранение имени (и расширения) PDB для выпущенных изображений является единственным способом отладки изображения, которое является ошибкой. Изображения Windows почти всегда содержат имя и расширение PDB!

+3

Это лучшее решение, однако более новые версии переименовали этот параметр, и теперь вы должны передать '/ pdbaltpath:% _ PDB%' в компоновщик. –

2

Если вы не возражаете, используя внешний инструмент, и вы не можете восстановить свой модуль с/pdbpath: доли не имеет, то peupdate инструмент может быть использован для отображения, удалить или изменить строку PDB в исполняемом модуле:

http://bytepointer.com/tools/index.htm#peupdate

Вы можете использовать инструмент, как следует очистить путь PDB:

peupdate -c <module_path> 
Смежные вопросы