pdb包含調試器爲了正確讀取堆棧所需的信息。您的堆棧跟蹤將包含您擁有該pdb的模塊內的堆棧幀的行號和符號名稱。
我給兩個用法的例子。第一個是明顯的答案。第二個解釋了源代碼索引的pdb。
1日使用例子...
根據調用約定並優化使用的編譯器,它可能無法調試器手動通過對你沒有PDB模塊展開堆棧。這可能會發生在某些第三方庫,甚至操作系統的某些部分。
考慮在Windows操作系統內遇到訪問衝突的情況。堆棧跟蹤不會放到您自己的應用程序中,因爲該OS組件使用特殊的調用約定來混淆調試器。如果您將符號路徑配置爲下載公共操作系統pdb,那麼很有可能堆棧跟蹤將放到您的應用程序中。這使您能夠準確查看自己的代碼傳遞給OS系統調用的參數。 (以及類似的例子爲第三方庫的內部,甚至裏面的自己的代碼AV)
第二個用法示例...
PDB的還有一個非常有用的性質 - 它們可以使用一些源代碼控制系統集成微軟稱之爲「源索引」的功能。源代碼索引的pdb包含源代碼控制命令,用於指定如何從源代碼控制中獲取用於構建組件的確切文件版本。微軟的調試器瞭解如何執行命令以在調試會話期間自動獲取文件。這是一個強大的功能,可以使調試機器人不必手動將源樹同步到給定構建的正確標籤。這對於遠程調試會話和分析事故後崩潰轉儲特別有用。
「windows的調試工具」安裝(windbg)包含一個名爲srcsrv.doc的文檔,它提供了一個演示如何使用srctool.exe來確定哪些源文件在給定的pdb中被源索引的示例的文檔。
要回答你的問題:「我怎麼知道」,在調試器中的「模塊」功能可以告訴你哪些模塊都有相應的PDB。在windbg中使用「lml」命令。在Visual Studio中,從調試菜單中的某個地方選擇模塊。(對不起,我沒有最新版本的visual studio)