从已发布的文件中删除PDB引用

时间:2012-06-19 20:48:57

标签: visual-c++ reference release pdb

我总是在调试和使用任何IDE创建文件后,总是查看最终的二进制可执行文件或dll。现在我正在尝试Visual C ++ 2010,寻找最佳版本,没有垃圾或不必要的引用。 因此,我创建了一个包含两个项目的新解决方案:可执行文件及其dll。 VC ++在代码和最终文件之间创建了很多中间文件。我用十六进制编辑器打开了.exe和.dll,看到了一些我不喜欢的东西。 文件内部的某处是.PDB文件的绝对路径。

为什么呢?如何从VC ++中删除它?

必须有一些预处理器命令。什么是.PDB文件的绝对路径的使用,如“D:\ My Projects \ Project1 \ Release \ Project1.pdb”在将在计算机上分发的文件的二进制文件中不同文件夹?除此之外,我不希望看到我的驱动器路径中的一个保存在我希望与其他人共享的二进制文件中。我处于发布模式,我没有看到使用那些不必要的信息。我怎么能删除它?谢谢!

3 个答案:

答案 0 :(得分:13)

您可以使用/pdbpath:none删除PDB文件的完整限定路径名,但仅保留PDB的名称和扩展名。保留已发布图像的PDB名称(和扩展名)是调试错误图像的唯一方法。 Windows映像几乎总是保留PDB的名称和扩展名!

答案 1 :(得分:9)

阅读MSDN上的PDB Files文档:

  

程序数据库(PDB)文件包含调试和项目状态信息,允许增量链接程序的Debug配置。使用/ ZI或/ Zi编译C / C ++程序或使用/ debug编译Visual Basic / C#/ JScript .NET程序时,将创建PDB文件。

     

在Visual C ++中,/ Fd选项命名编译器创建的PDB文件。使用向导在Visual Studio中创建项目时,/ Fd选项设置为创建名为project.PDB的PDB。

请注意,绝对路径在文档中提到:

  

Visual Studio调试器直接使用链接器创建的project.PDB文件,并在EXE或DLL文件中嵌入PDB的绝对路径。

您可以随时转到“项目属性”>链接器>调试>生成调试信息并将其设置为No。

答案 2 :(得分:3)

如果您不介意使用外部工具并且无法使用/ pdbpath:none重建模块,则可以使用 peupdate 工具列出,删除或更改PDB字符串。可执行模块:

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

您可以使用以下工具清除PDB路径:

peupdate -c <module_path>