我越來越困惑,什麼是編譯器和鏈接PDB
文件分別(即在Visual Studio中,Project Properties > C/C++ > Output Files > Program Database File Name
VSProject Properties > Linker > Debugging
)之間的差異。我試圖在網上找到答案,到目前爲止我知道(可能是錯誤的)編譯器的PDB
文件生成obj
文件,而PDB
文件由鏈接器生成的二進制文件(exe或dll),並且是一個用於調試。編譯器PDB文件和鏈接器PDB文件
如果不是這樣,請說明不同之處。無論哪種方式,當我創建DLL
時,我可以選擇輸出PDB
文件以選擇編譯器以及鏈接器,以及在創建LIB文件時只執行編譯器生成PDB
文件的操作因爲沒有執行鏈接。
背景:庫/ DLL是由幾個項目,然後需要
PDB
文件用於調試。在lib
文件的情況下,不存在歧義,因爲只生成一個PDB
文件。但是,在DLL
的情況下,我是否需要PDB
文件才能正確調試,或者只需要鏈接器生成的文件?
(您更新之前發佈此,但它適用於更新以及) 所以,當我創建'lib'文件(即靜態庫),只有編譯器可以生成'PDB '文件,因爲鏈接器不再需要,這是否意味着現在由編譯器生成的'pdb'文件是調試所需的文件? – Samaursa 2010-09-26 01:36:46
.lib文件不涉及程序的執行或調試。它們只是鏈接器的輸入。 lib文件中適當的'stuff'可以作爲二進制文件的一部分(對於靜態庫),或者用於創建DLL的動態鏈接(在導入庫的情況下)。 無論在哪種情況下,您需要調試的.pdb文件都是在生成實際的.exe或.dll文件時由鏈接器生成的.pdb文件。 – 2010-09-26 01:57:23
太好了,謝謝你對Michael的闡述,我會繼續檢查這個答案。雖然因爲我們關於這個問題,如果你能回答這個問題。 Havok SDK是靜態鏈接的,它的所有庫都有它們各自的'PDB'文件。有趣的是,如果你在同一個目錄下沒有附帶'PDB'文件的庫鏈接,那麼Visual Studio會給出大量的警告:'調試信息丟失,編譯好像沒有提供調試信息'(我是解釋) – Samaursa 2010-09-26 02:10:36