Share via


Consultar el archivo .pdb

Un archivo de base de datos de programa (extension.pdb) es un archivo binario que contiene información de depuración simbólica y de tipo recopilada durante la compilación y vinculación del proyecto. Se crea un archivo PDB al compilar un programa de C/C++ con /ZI o /Zi o un programa de Visual Basic, Visual C# o JScript con la opción /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 pdb, consulte Archivos PDB. Una aplicación DIA puede usar los siguientes pasos generales para obtener detalles sobre los distintos símbolos, objetos y elementos de datos dentro de una imagen ejecutable.

Para consultar el archivo .pdb

  1. Adquiera un origen de datos mediante la creación de una interfaz 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." );
    }
    
  2. 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" );
        }
    }
    
  3. Llame a IDiaDataSource::openSession para abrir una IDiaSession para obtener acceso a la información de depuración.

    CComPtr<IDiaSession> psession;
    if ( FAILED( pSource->openSession( &psession ) ) )
    {
        Fatal( "openSession" );
    }
    
  4. Use los métodos de IDiaSession para consultar los símbolos del origen de datos.

    CComPtr<IDiaSymbol> pglobal;
    if ( FAILED( psession->get_globalScope( &pglobal) ) )
    {
        Fatal( "get_globalScope" );
    }
    
  5. Use las interfaces IDiaEnum* para enumerar y examinar los símbolos u otros elementos de la 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.
    }
    

Consulte también