使用 Visual Studio 编译器以编程方式分析代码

Analyzing code programmatically using Visual Studio compiler

我需要以编程方式从 C++ 代码片段构建一个列表,类似于在 Visual Studio 中使用 /d1reportAllClassLayout 参数编译代码(参见 https://pigworlds.wordpress.com/2009/01/17/msvc-compiler-d1reportsingleclasslayout-d1reportallclasslayout/ 以获取参考和示例)。此列表应包含自定义格式的 class 成员和虚函数 table 信息(class 成员名称、类型和偏移量)。

为此,我需要以某种方式访问​​ Visual Studio 编译器生成的 AST。从 C++ 代码生成这个列表的任务可以使用 Clang 来实现,但我的任务的细节是这个列表中的所有数据(成员名称、类型和偏移量)应该与 Visual Studio 编译器的数据相同。例如,我不确定 Clang 是否会在结构中生成与 Visual Studio 编译器相同的成员偏移量。

谁能指出我实现这一目标的正确方向? Clang 实际上足以满足这个目的(我还不太熟悉它)还是我应该写 Visual Studio 扩展名?

P.S。我知道这个问题可能不是很好,因为目前我对该主题的了解还很模糊。如果我能更好地理解我真正需要什么来解决我的任务,我准备改进它。

编辑: 这是我需要撰写的列表示例:

ClassA

offset | name        | size | C++ type        

0x00   | {vfptr}     | 4    | ClassA::$vftable
0x04   | mID         | 4    | unsigned int
0x08   | mColor      | 16   | CColor
0x18   | mpFunc      | 4    | void (__cdecl *)(char isVisible)
0x1C   | mBuffer     | 16   | char[16]

事实证明,Clang 是完成此任务的不错选择。
使用 Clang,我能够创建一个工具,使用 C++ 类 根据 C++ 文件中的定义生成所需的输出。