Я пытаюсь получить информацию о символах из приложения, созданного в 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.В прошлом это работало, и я смог получить символы для каждой компиляции.Код взят из инструмента dia2dump внутри DIA SDK, который также не работает.Я обнаружил https://github.com/Microsoft/microsoft-pdb, но исполняемый файл в этом репозитории также не работает (cvdump.exe -s test.exe показывает много 1167 найденных неизвестных символов).
Они изменили формат PDB, чтобы сделать его несовместимымс SDK?Или я упускаю что-то очень очевидное?
Спасибо.
РЕДАКТИРОВАТЬ: это происходит только в отладочных pdbs, pdbs компиляции режима выпуска работают.