Вопрос по reference, visual-c++, release, pdb – Удалить ссылки PDB из выпущенного файла

15

Я использую, чтобы всегда смотреть на конечный двоичный исполняемый файл или 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" внутри двоичного файла, который будет распространяться на компьютерах с разными папками? Кроме того, я не хотел бы видеть один из маршрутов моего накопителя, сохраненный в двоичном файле, которым я хочу поделиться с другими людьми. Я нахожусь в режиме выпуска, я не вижу использования этой ненужной информации. Как я мог удалить это? Спасибо!

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

Ваш Ответ

3   ответа
11

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

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

ПрочитайтеФайлы 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; Сгенерируйте Отладочную информацию и установите для нее Нет.

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

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

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

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

peupdate -c <module_path>

Похожие вопросы