2017-06-20 106 views
2

我在我的C++應用程序上使用VS2015調試器。當我啓動應用程序時,調試器給出消息PDB不匹配.exe

Loaded 'C:\MyDir\Working\x64\Debug\MyApp.exe'. Cannot find or open the PDB file 

因此,我無法設置斷點。

根據VS調試器以及WidDBG Symchk的說法,在.exe的同一目錄下有一個.pdb文件,但它不匹配。 Symchk不提供不匹配的原因,即使使用/ v選項也是如此。

完全重建不會使此問題消失。它只發生在調試版本,並且今天剛剛開始。在今天之前,對於調試或發佈版本,不匹配的pdb是沒有問題的。

我使用的VS選項有:

  • C++:調試信息格式=程序數據庫(/ ZI)程序數據庫文件名= $(IntDir)%(文件名).PDB;
  • 鏈接器:生成調試信息=優化調試(/ DEBUG),生成程序數據庫文件= $(OutDir)MyApp.pdb,生成完整的程序數據庫文件=是。

單個對象的pdb文件出現在中間目錄中,MyApp.pdb和MyApp.exe一起出現在輸出目錄中。

現在,這裏是一個奇怪的部分:當刪除現有的MyApp.pdb然後重新鏈接時,新的.pdb文件出現在當前mod時間的輸出目錄中。鏈接器運行時,pdb文件會變大(〜70 MB),但當鏈接器完成時,pdb文件會突然變小(〜4 MB),並且mod時間現在會在幾個小時之前更改。這是非常可疑的,可能會導致pdb不匹配。

鏈接器的最終輸出線

我怎麼能強迫VS產生的調試版本匹配和正確的PDB文件?

回答

3

更新:問題是在中間目錄(它是編譯器爲MyApp.cpp創建的pdb文件)中創建了一個pdb文件MyApp.pdb。出於某種原因,鏈接器在最後用這個替換了「真正的」pdb文件。由於它們具有相同的名稱MyApp.pdb,因此Symchk不會顯示名稱不匹配(儘管可能存在不明顯的時間戳不匹配)。

MyApp.cpp的調試信息如何包含在最終的MyApp.pdb中並不明顯。