我正在构建一个处理VC ++源代码的工具。为此,我需要获取一个符号列表,包括我的代码使用的局部变量名称和类型。我知道Visual C ++ 2010已经提供了一个.bsc文件,允许对象浏览器快速定位符号。但这是一个互动工具。我需要获取文件中的符号列表。是否有任何工具允许我们以编程方式获取我们自己的VC ++源代码中使用的符号列表?
我尝试了Microsoft提供的Debug Interface Access SDK。它允许我们读取.pdb文件以获取所使用的局部变量的名称。但我也想获得源代码中使用的确切类型名称。 e.g。
MYTYPE dwordVar;
DIA SDK允许我们获取字符串“dwordVar”,它是本地变量的名称。但它不能说它的类型名称是“MYTYPE”。它只能告诉我们MYTYPE真正代表什么(如无符号长)。但不是符号“MYTYPE”。
如果Visual C ++不提供此功能,是否有支持此功能的第三方工具?
答案 0 :(得分:1)
尝试这个程序:
typedef unsigned long MYTYPE;
int wmain(int argc, wchar_t *argv[])
{
MYTYPE test = 99LU;
}
DIA SDK和DbgHelp返回16(SymTagBaseType
)作为test
的类型符号的symtype。如果类型符号是Typedef符号(17 / SymTagTypedef
)会很好,但可能是PDB本身不会记录源文件是否使用typedef
或类型名称来声明局部变量的类型。
一种可能的解决方法是枚举全局范围符号的SymTagTypedef
子元素,从类型的类型ID到std::multimap
名称构建typedef
。然后,对于每个局部变量,如果多图包含数据符号的类型ID(通过IDiaSymbol::get_typeId
获得)的条目,请使用IDiaSession::findLines
方法确定数据符号所在的行。声明并搜索这些行以查找任何typedef
名称字符串,可能在搜索之前执行预处理。