ali*_*ali 15 release reference visual-c++ pdb
我总是在调试和使用任何IDE创建文件后总是查看最终的二进制可执行文件或dll.现在我正在尝试Visual C++ 2010,寻找最佳版本,没有垃圾或不必要的引用.因此,我创建了一个包含两个项目的新解决方案:可执行文件及其dll.VC++在代码和最终文件之间创建了很多中间文件.我用十六进制编辑器打开了.exe和.dll,看到了一些我不喜欢的东西.在文件内部的某处,存在.PDB文件的绝对路径.
为什么?如何从VC++中删除它?
必须有一些预处理器命令.什么是.PDB文件的绝对路径的用途,比如将在分布在具有不同文件夹的计算机上的文件的二进制文件中的"D:\ My Projects\Project1\Release\Project1.pdb"?除此之外,我不希望看到我的驱动器路径中的一个保存在我希望与其他人共享的二进制文件中.我处于发布模式,我没有看到使用那些不必要的信息.我怎么能删除它?谢谢!
mox*_*mox 13
您可以使用/pdbpath:none
删除PDB文件的完整限定路径名,但仅保留PDB的名称和扩展名.保留已发布图像的PDB名称(和扩展名)是调试错误图像的唯一方法.Windows映像几乎总是保留PDB的名称和扩展名!
阅读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的绝对路径.
您始终可以转到项目属性>链接器>调试>生成调试信息并将其设置为否.
如果您无法重建模块(即使用链接器开关 /PDBPATH:NONE,Microsoft 似乎已取消了对它的支持),我为此编写了peupdate工具,只要您不介意使用 3rd-party 工具. Peupdate 可用于列出、删除或更改可执行模块中的 PDB 字符串。下面是一些例子:
peupdate -c <module_path> //clear entire PDB path
peupdate -k <module_path> //remove PDB path, but retain filename
peupdate -u <newpath> <module_path> //set your own path string
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11228 次 |
最近记录: |