Consultar el archivo .pdb
Un archivo de base de datos de programa (extensión .pdb) es un archivo binario que contiene el tipo y la información de depuración simbólica recopilados a lo largo de edificio y vincular el proyecto.Se crea un archivo PDB cuando se compila un programa escrito en C/C++. /C ++ con /ZI o /Zi o Visual Basic, Visual C#, o programa de JScript con la opción de /debug .Los archivos objeto contienen referencias en el archivo .pdb para la información de depuración.Para obtener más información sobre los archivos de pdb, vea [OBSOLETO] Archivos de base de datos de programa (C++).Una aplicación de diámetro puede utilizar los pasos generales siguientes para obtener detalles sobre los símbolos diferentes, objetos, y datos de una imagen ejecutable.
Para ver el archivo .pdb
adquiera un origen de datos creando una interfaz de 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." ); }
Llame a IDiaDataSource::loadDataFromPdb o IDiaDataSource::loadDataForExe para cargar la información de depuració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" ); } }
Llame a IDiaDataSource::openSession para abrir IDiaSession para obtener acceso a información de depuración.
CComPtr<IDiaSession> psession; if ( FAILED( pSource->openSession( &psession ) ) ) { Fatal( "openSession" ); }
Use los métodos de IDiaSession para consultar los símbolos en el origen de datos.
CComPtr<IDiaSymbol> pglobal; if ( FAILED( psession->get_globalScope( &pglobal) ) ) { Fatal( "get_globalScope" ); }
Use las interfaces de IDiaEnum* para enumerar y buscar a través de los símbolos u otros elementos de información de depuració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. }