2014-09-01 126 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没有。