Partager via


Interrogation du fichier .Pdb

Un fichier de base de données du programme (extension .pdb) est un fichier binaire qui contient le type et les informations de débogage symboliques recueillis au cours de la compilation et de lier le projet. Un fichier PDB est créé lorsque vous compilez le programme C/C++ /C (avec /ZI ou /Zi ou Visual Basic, Visual C#, ou programme de JScript avec l'option d' /debug . Les fichiers objets contiennent des références dans le fichier .pdb pour les informations de débogage. Pour plus d'informations sur les fichiers pdb, consultez [OBSOLÈTE] Fichiers de base de données du programme (C++). Une application de diamètre peut utiliser des étapes générales suivantes pour obtenir des détails sur les différents symboles, objets, et éléments de données dans une image exécutable.

Pour interroger le fichier .pdb

  1. acquérez une source de données en créant une interface d' 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. Appelez IDiaDataSource::loadDataFromPdb ou IDiaDataSource::loadDataForExe pour charger des informations de débogage.

    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. appelez IDiaDataSource::openSession pour ouvrir IDiaSession pour accéder aux informations de débogage.

    CComPtr<IDiaSession> psession;
    if ( FAILED( pSource->openSession( &psession ) ) ) 
    {
        Fatal( "openSession" );
    }
    
  4. Utilisez les méthodes dans IDiaSession pour rechercher des symboles dans la source de données.

        CComPtr<IDiaSymbol> pglobal;
        if ( FAILED( psession->get_globalScope( &pglobal) ) )
        {
            Fatal( "get_globalScope" );
        }
    
  5. Utilisez les interfaces d' IDiaEnum* pour énumérer et parcourir les symboles ou d'autres éléments d'informations de débogage.

    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.
    }
    

Voir aussi

Référence

IDiaDataSource