Dotazování na soubor .Pdb
Soubor databáze programu (přípona .pdb) je binární soubor, který obsahuje informace o typu a symbolickém ladění shromážděné v průběhu kompilace a propojení projektu. Soubor PDB se vytvoří při kompilaci programu C/C++ pomocí /ZI nebo /Zi nebo Visual Basicu, Visual C# nebo JScriptu s možností /debug . Soubory objektů obsahují odkazy na soubor .pdb pro informace o ladění. Další informace o souborech pdb najdete v tématu Soubory PDB. Aplikace DIA může pomocí následujících obecných kroků získat podrobnosti o různých symbolech, objektech a datových prvcích ve spustitelném obrázku.
Dotazování souboru .pdb
Získání zdroje dat vytvořením rozhraní 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." ); }
Volání IDiaDataSource::loadDataFromPdb nebo IDiaDataSource::loadDataForExe pro načtení informací o ladění.
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" ); } }
Volání IDiaDataSource::openSession k otevření IDiaSession získat přístup k informacím o ladění.
CComPtr<IDiaSession> psession; if ( FAILED( pSource->openSession( &psession ) ) ) { Fatal( "openSession" ); }
IDiaSession
Metody použijte k dotazování na symboly ve zdroji dat.CComPtr<IDiaSymbol> pglobal; if ( FAILED( psession->get_globalScope( &pglobal) ) ) { Fatal( "get_globalScope" ); }
IDiaEnum*
Rozhraní slouží k vytvoření výčtu a procházení symbolů nebo jiných prvků informací o ladění.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. }