PDBRipper是一個(gè)實(shí)用程序,用于提取從PDB-文件的信息。
PDPRipper可以提。
枚舉
用戶定義類型(結(jié)構(gòu),工會(huì)...)
類型定義
pdb文件是什么?
.pdb文件,是VS生成的用于調(diào)試的符號(hào)文件(program database),保存著調(diào)試的信息。在VS的工程屬性,C/C++,調(diào)試信息格式,設(shè)置/Zi,那么VS就會(huì)在構(gòu)建項(xiàng)目時(shí)創(chuàng)建PDB文件。
在這里要區(qū)分兩種情況:
1、構(gòu)建靜態(tài)庫(kù)時(shí),可以在工程屬性 –> C/C++ –> 輸出文件 –> 程序數(shù)據(jù)庫(kù)名 設(shè)置生成的pdb文件名稱,如果不指定,默認(rèn)是生成為VCx0.pdb,這里x是VS版本號(hào),例如用VS2005,就會(huì)生成VC80.pdb。這里就會(huì)產(chǎn)生一個(gè)疑問(wèn),編譯靜態(tài)庫(kù)時(shí)默認(rèn)生成的.pdb文件名字都一樣,那引用這個(gè)靜態(tài)庫(kù)的項(xiàng)目最后能找到正確的.pdb文件嗎?答案是肯定的,因?yàn)閂S會(huì)在生成的文件中嵌入 .pdb 文件的路徑。
舉個(gè)例子,在Project/ToolA下,構(gòu)建了一個(gè)靜態(tài)庫(kù)ToolA.lib,對(duì)應(yīng)生成一個(gè)vc80.pdb,同樣在在Project/ToolB下,構(gòu)建了一個(gè)靜態(tài)庫(kù)ToolB.lib,對(duì)應(yīng)生成一個(gè)vc80.pdb。然后最終的工程Work.exe同時(shí)鏈接了這兩個(gè)靜態(tài)庫(kù).這時(shí),生成Work.pdb的時(shí)候,就會(huì)在ToolA.lib中找到它對(duì)應(yīng)的符號(hào)文件路徑Project/ToolA/vc80.pdb,以及ToolB.lib對(duì)應(yīng)的符號(hào)文件路徑Project/ToolB/vc80.pdb,合并生成最終工程的Work.pdb。
2、構(gòu)建可執(zhí)行文件或動(dòng)態(tài)庫(kù),這種情況下,編譯器會(huì)生成一個(gè).pdb文件,鏈接器會(huì)生成一個(gè).pdb文件,編譯器生成的pdb文件可以在在工程屬性 –> C/C++ –> 輸出文件 –> 程序數(shù)據(jù)庫(kù)名 設(shè)置,鏈接器生成的.pdb文件可以在工程屬性 –> 鏈接器 –> 調(diào)試 –> 生成調(diào)試信息(設(shè)置Yes),生成程序數(shù)據(jù)庫(kù)名設(shè)置。