Podczas badania.Plik PDB
Plik bazy danych programu (rozszerzeniem .pdb) jest plik binarny, który zawiera typ i symboliczne debugowania informacji zebranych w czasie kompilacji i łączenie projektu.Plik PDB jest tworzony podczas kompilowania program c i C++ z /ZI lub /Zi lub Visual Basic, Visual C#, lub JScript programu z /debug opcji.Obiekt pliki zawierają odwołania do pliku .pdb dla informacji debugowania.Aby uzyskać więcej informacji dotyczących plików pdb, zobacz [OBSOLETE] Pliki bazy danych programu (C++).Aplikacja DIA można użyć następujące ogólne kroki, aby uzyskać szczegółowe informacje dotyczące różnych symboli, obiektów i elementów danych w obrębie obrazu wykonywalnego.
Aby wykonać kwerendę dotyczącą pliku .pdb
Nabycia źródła danych, tworząc IDiaDataSource interfejsu.
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." ); }
Wywołanie IDiaDataSource::loadDataFromPdb lub IDiaDataSource::loadDataForExe do załadowania informacji o debugowaniu.
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" ); } }
Wywołanie IDiaDataSource::openSession otworzyć IDiaSession celu uzyskania dostępu do informacji o debugowaniu.
CComPtr<IDiaSession> psession; if ( FAILED( pSource->openSession( &psession ) ) ) { Fatal( "openSession" ); }
Użyj metody w IDiaSession do kwerendy dla symboli w źródle danych.
CComPtr<IDiaSymbol> pglobal; if ( FAILED( psession->get_globalScope( &pglobal) ) ) { Fatal( "get_globalScope" ); }
Użyj IDiaEnum* informacje debugowania interfejsów wyliczanie i skanowanie za pomocą symboli lub innych elementów.
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. }