2014-09-01 88 views
0

我正在寫一個windbg擴展名來使用ExtRemoteData打印結構的內容。我發現當結構發生變化時,我需要不斷更改我的代碼。從C文件中提取結構成員名稱

相反,我認爲它會更靈活,如果我可以直接讀取C文件並解析我的結構以獲取結構成員名稱。

有沒有一個工具/功能我可以讀取一個C文件,並枚舉我的結構的各種元素? C編譯器內部正在這樣做,但我不知道如何提取該信息。

喜歡的東西 Tool.exe 名稱值對將包含信息,如 {(membername1,TYPE1),(membername2,TYPE2)......(membernameN,力typen)}

+3

該信息包含在您可以通過[DbgHelp]閱讀的私人PDB中(http://msdn.microsoft.com/de-de/library/windows/desktop/aa363368%28v=vs.85%29.aspx ) – 2014-09-01 11:31:38

+0

這聽起來更像我想要的。謝謝托馬斯! – 2014-09-09 09:44:16

+0

不客氣。我已經給出了這個答案(更詳細一些),以便問題可以被標記爲已解決。 – 2014-09-09 09:58:34

回答

0

有更多的研究需要在這裏,但作爲一個快捷方式,你可能要考慮像python這樣的腳本語言來做你的解析以下是指一個可以做你打算做的事情的python庫。 parsing C code using python

現在來使用WinDbg作爲一個擴展,是已有結賬http://pykd.codeplex.com/

+0

這是新的,謝謝!我會盡管更喜歡使用DbgHelp之類的東西,這將有助於直接從我用C/C++編寫的擴展中讀取它。 – 2014-09-09 09:48:10

0

類型的信息通常包含在PDB(程序數據庫)符號文件整合蟒蛇的一部分。有公共符號和私人符號。您可能需要使用私人符號才能獲取所需的全部信息。

您不僅可以爲調試版本生成專用PDB,還可以爲生成版本生成專用PDB。它應該只是您首選的IDE中的一個設置。

一旦你有私人符號,你可以用DbgHelp API閱讀它。根據您已有的信息,例如SymFromName()聽起來有用。

雖然解析C文件也可能是一個選項,請注意源代碼文件可能已經更改,但編譯的DLL和PDB沒有。