我正面临 DbGHelp API 的奇怪行为,我什至找不到解释理论。我有一些 PDB 文件(用于 DLL;从 Internet 下载),我正在寻找 PDB 文件中的特定符号。我尝试了四种选择:
- 一个全新的TYPEINFODUMP预建下载副本;
- 一年半前我自己下载并构建的TYPEINGODUMP副本(在 Windows 8.1 上使用 Visual Studio 10 和 Windows SDK 7.0 构建);
- 与 #2 相同的源,但现在重新构建(Windows 10 与 Visual Studion 10 和 Windows SDK 7.0);
- 我自己的代码:一个非常简单的 SymInitialize()、SymLoadModule64() 和 SymEnumSymbols() 序列(在 Windows 10 上使用 Visual Studion 10 和 Windows SDK 7.0 构建)。
所有这些选项都在 Windows 10 上使用,除了选项 #1(它自带 dbghelp.dll 版本 6.3.0017.0 的副本)之外,所有这些选项都加载了相同的 dbghelp.dll(选中;10.0.14321.1024)。
现在,在所有情况下都可以找到所需的符号。然而,选项 #1、#3 和 #4 报告此符号的 TypeIndex=0、Size=0 和 Tag=SymTagPublicSymbol,这是不正确的。只有选项 #2 报告 TypeIndex=2、Size=295 和 Tag=SymTagFunction 的符号,这确实是正确的。我所有使用编译的代码(我的或不是我的)获取正确符号信息的尝试现在都以失败告终。只有我前段时间构建的 TYPEINFODUMP 才能带来正确的结果。我完全绝望了。这种情况有什么合乎逻辑的解释吗?我可能会错过什么?