2012-06-19 87 views
13

我用它在任何IDE調試和創建文件之後總是查看最終的二進制可執行文件或dll。現在我正在嘗試Visual C++ 2010,在搜索最佳版本時沒有垃圾或不必要的引用。 因此,我創建了一個包含兩個項目的新解決方案:一個可執行文件和它的dll。 VC++在代碼和最終文件之間創建了很多中介文件。我用十六進制編輯器打開了.exe和.dll文件,並看到了一些我不喜歡的東西。 文件中的某處存在.PDB文件的絕對路徑。從發佈的文件中刪除PDB引用

爲什麼?我怎樣才能從VC++中刪除它?

必須有一些預處理器命令。什麼是一個.PDB文件的絕對路徑的使用,如「D:\ My Projects \ Project1 \ Release \ Project1.pdb」在一個文件的二進制文件中,它將分佈在具有不同文件夾的計算機上?除此之外,我不喜歡將我的驅動器的一個路由保存在我想與其他人分享的二進制文件中。我處於發佈模式,我沒有看到使用這些不必要的信息。我怎麼能刪除它?謝謝!

+0

這個[問題]的可能的複製[1]?您可以刪除PDB的路徑。但請保留對PDB的參考。 [1]:http:// stackoverflow。com/questions/7596628/strip-the-path-to-the-pdb – mox

回答

7

閱讀MSDN上的PDB Files文檔:

程序數據庫(PDB)文件保存調試和項目狀態信息,使你的程序的調試配置的增量鏈接。使用/ debug編譯帶/ ZI或/ Zi或Visual Basic/C#/ JScript .NET程序的C/C++程序時會創建PDB文件。

在Visual C++中,/ Fd選項將命名由編譯器創建的PDB文件。當您使用嚮導在Visual Studio中創建項目時,/ Fd選項設置爲創建名爲project.PDB的PDB。

注意,絕對路徑的文件中提到:

Visual Studio調試器使用直接鏈接器創建的project.PDB文件並嵌入在EXE到PDB的絕對路徑或DLL文件。

您可以隨時到項目屬性>鏈接>調試>生成調試信息,並將其設置爲No.

+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你的模塊:none,則peupdate工具可用於列出,刪除或更改PDB串可執行模塊:

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

如下清除PDB路徑,則可以使用該工具:

peupdate -c <module_path>