DIA SDK无法读取VS 2017 pdb文件

时间:2018-10-22 16:11:40

标签: c++ visual-studio winapi dia-sdk

我正在尝试从我使用Visual Studio 2017创建的应用程序中获取符号信息。

过去使用VS2015时,我能够借助DIA SDK读取符号。

代码(已删除错误检查):

CComPtr<IDiaDataSource> pSource;
hr = CoCreateInstance(CLSID_DiaSource, NULL, CLSCTX_INPROC_SERVER, __uuidof(IDiaDataSource), (void **)&pSource);

hr = pSource->loadDataForExe(exepath, NULL, NULL);
CComPtr<IDiaSession> psession;      
CComPtr<IDiaSymbol> pGlobal;
hr = psession->get_globalScope(&pGlobal);

// Enumerate compilands
CComPtr<IDiaEnumSymbols> pEnumSymbols;
pGlobal->findChildren(SymTagCompiland, 0, nsNone, &pEnumSymbols);               
CComPtr<IDiaSymbol> pCompiland;
ULONG celt = 0;
while (SUCCEEDED(pEnumSymbols->Next(1, &pCompiland, &celt)) && (celt == 1))
    {
    ULONG celt = 0;
    CComPtr<IDiaSymbol> pSymbol;
    CComPtr<IDiaEnumSymbols> pEnumSymbols;
    HRESULT hr = pCompiland->findChildren(SymTagFunction, NULL, nsNone, &pEnumSymbols);
....

最后一次调用返回E_NOTIMPL。在过去,它可以正常工作,我能够获得每个compiland的符号。该代码来自DIA SDK中的dia2dump工具,该工具也将失败。我发现https://github.com/Microsoft/microsoft-pdb,但是此存储库中的可执行文件也失败了(cvdump.exe -s test.exe显示找到许多1167个未知符号)。

他们是否更改了PDB格式以使其与SDK不兼容?还是我遗漏了一些非常明显的东西?

谢谢。

编辑:这仅在调试pdbs,发布模式下编译pdbs工作时发生。

0 个答案:

没有答案