Я пытаюсь получить информацию о символах из приложения, созданного с помощью 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 компиляции режима выпуска.
Задача ещё не решена.
Других решений пока нет …