Запрос PDB-файла
Расширение файла базы данных программы (pdb) двоичный файл, содержащий сведения о типе и символической отладки собранные на курсом компилировать и связать проект. Pdb-файл создается при компилировании программы c с /C ++ /ZI OR /Zi или a Visual Basic" Visual C#или JScript программа с /debug параметр. Объектные файлы содержат ссылки на файл pdb для отладки. Дополнительные сведения о файлах см. файл pdb. [УСТАРЕЛО] Файл базы данных программы (C++). Приложение DIA может использовать следующие общие шаги, чтобы получить сведения о различных символах, объектами и элементах данных внутри исполняемого образа.
Запросить pdb-файл
Приобретите источник данных можно создать IDiaDataSource интерфейс.
CComPtr<IDiaDataSource> pSource; hr = CoCreateInstance( CLSID_DiaSource, NULL, CLSCTX_INPROC_SERVER, __uuidof( IDiaDataSource ), (void **) &pSource); if (FAILED(hr)) { Fatal("Could not CoCreate CLSID_DiaSource. Register msdia80.dll." ); }
Вызов IDiaDataSource::loadDataFromPdb OR IDiaDataSource::loadDataForExe загрузить данные отладки.
wchar_t wszFilename[ _MAX_PATH ]; mbstowcs( wszFilename, szFilename, sizeof( wszFilename )/sizeof( wszFilename[0] ) ); if ( FAILED( pSource->loadDataFromPdb( wszFilename ) ) ) { if ( FAILED( pSource->loadDataForExe( wszFilename, NULL, NULL ) ) ) { Fatal( "loadDataFromPdb/Exe" ); } }
Вызов IDiaDataSource::openSession открыть IDiaSession получить доступ к данным отладки.
CComPtr<IDiaSession> psession; if ( FAILED( pSource->openSession( &psession ) ) ) { Fatal( "openSession" ); }
Используйте методы in IDiaSession запросить символов в источнике данных.
CComPtr<IDiaSymbol> pglobal; if ( FAILED( psession->get_globalScope( &pglobal) ) ) { Fatal( "get_globalScope" ); }
Используйте IDiaEnum* интерфейсы для перечисления и просмотреть через символы или другие элементы отладочные сведения.
CComPtr<IDiaEnumTables> pTables; if ( FAILED( psession->getEnumTables( &pTables ) ) ) { Fatal( "getEnumTables" ); } CComPtr< IDiaTable > pTable; while ( SUCCEEDED( hr = pTables->Next( 1, &pTable, &celt ) ) && celt == 1 ) { // Do something with each IDiaTable. }