获取我的VC ++代码使用的符号列表

时间:2011-08-28 12:12:22

标签: visual-studio-2010 debug-symbols dia-sdk browse-information

我正在构建一个处理VC ++源代码的工具。为此,我需要获取一个符号列表,包括我的代码使用的局部变量名称和类型。我知道Visual C ++ 2010已经提供了一个.bsc文件,允许对象浏览器快速定位符号。但这是一个互动工具。我需要获取文件中的符号列表。是否有任何工具允许我们以编程方式获取我们自己的VC ++源代码中使用的符号列表?

我尝试了Microsoft提供的Debug Interface Access SDK。它允许我们读取.pdb文件以获取所使用的局部变量的名称。但我也想获得源代码中使用的确切类型名称。 e.g。

MYTYPE dwordVar;

DIA SDK允许我们获取字符串“dwordVar”,它是本地变量的名称。但它不能说它的类型名称是“MYTYPE”。它只能告诉我们MYTYPE真正代表什么(如无符号长)。但不是符号“MYTYPE”。

如果Visual C ++不提供此功能,是否有支持此功能的第三方工具?

1 个答案:

答案 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名称字符串,可能在搜索之前执行预处理。