Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Un file di database di programma (estensione pdb) è un file binario che contiene il tipo e le informazioni di debug sui simboli raccolti nel corso della compilazione e di collegare il progetto.Un file PDB viene creato quando si compila il programma c C++ con /C /ZI o /Zi oppure Visual Basic, Visual C#, o JScript programma con /debug opzione.I file oggetti contengono riferimenti nel file con estensione pdb per le informazioni di debug.Per ulteriori informazioni sui file PDB, vedere [OBSOLETO] File di database di programma (C++).Un'applicazione di diametro possibile utilizzare i seguenti passaggi generali per ottenere dettagli sui vari simboli, oggetti e dati elementari all'interno di un'immagine eseguibile.
Per eseguire una query sul file pdb
Acquisire un'origine dati creando IDiaDataSource interfaccia.
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." ); }chiamata IDiaDataSource::loadDataFromPdb o IDiaDataSource::loadDataForExe per caricare le informazioni di debug.
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" ); } }chiamata IDiaDataSource::openSession per aprire IDiaSession per accedere alle informazioni di debug.
CComPtr<IDiaSession> psession; if ( FAILED( pSource->openSession( &psession ) ) ) { Fatal( "openSession" ); }Utilizzare i metodi in IDiaSession per eseguire una query per i simboli nell'origine dati.
CComPtr<IDiaSymbol> pglobal; if ( FAILED( psession->get_globalScope( &pglobal) ) ) { Fatal( "get_globalScope" ); }utilizzare IDiaEnum* interfacce da enumerare e analizzare dai simboli o altri elementi di informazioni di debug.
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. }