Удалить ссылки PDB из выпущенного файла

Я использую, чтобы всегда смотреть на конечный двоичный исполняемый файл или DLL после отладки и создания файла с любой IDE. Сейчас я пробую Visual C ++ 2010, в поисках лучшего релиза, без мусора или ненужных ссылок. Итак, я создал новое решение с двумя проектами: исполняемый файл и его DLL. VC ++ создал много промежуточных файлов между кодом и конечным файлом. Я открыл .exe и .dll с помощью шестнадцатеричного редактора и увидел что-то, что мне не нравится.Somewhere inside the file there's an absolute path to the .PDB file.

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

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

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

Ответы на вопрос(3)

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

 11 авг. 2016 г., 17:56
Это лучшее решение, однако более новые версии переименовали опцию, и теперь вы должны пройти/pdbaltpath:%_PDB% компоновщику.
Решение Вопроса

ПрочитайтеФайлы PDB документация по MSDN:

A program database (PDB) file holds debugging and project state information that allows incremental linking of a Debug configuration of your program. A PDB file is created when you compile a C/C++ program with /ZI or /Zi or a Visual Basic/C#/JScript .NET program with /debug.

In Visual C++, the /Fd option names the PDB file created by the compiler. When you create a project in Visual Studio using wizards, the /Fd option is set to create a PDB named project.PDB.

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

The Visual Studio debugger uses the project.PDB file created by the linker directly and embeds the absolute path to the PDB in the EXE or DLL file.

Вы всегда можете перейти в Свойства проекта & gt; Линкер & gt; Отладка & gt; Сгенерируйте Отладочную информацию и установите для нее Нет.

 ali19 июн. 2012 г., 23:07
ХОРОШО. Спасибо! Теперь я изменился, и это работает! Я ненавижу видеть строки, раскрытые в двоичном коде!
 ali19 июн. 2012 г., 23:02
Странно, что даже если я нахожусь в режиме Release, файлы .PDB все еще генерируются. Спасибо за Ваш ответ
 19 июн. 2012 г., 23:06
@ali: это настройка по умолчанию при создании нового проекта. Тем не менее, вы всегда можете выключить его. Обратите внимание, что PDB требуется только дляdebugging а такжеincremental linking и вам не нужно его отправлять (если только вы не хотите, чтобы ваши клиенты могли отлаживать).

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

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

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

peupdate -c <module_path>

Ваш ответ на вопрос