Interrogation du fichier .PdbQuerying the .Pdb File

Un fichier de base de données de programme (.pdb extension) est un fichier binaire qui contient le type et les informations de débogage symboliques collectées au cours de la compilation et la liaison du projet.A program database file (extension .pdb) is a binary file that contains type and symbolic debugging information gathered over the course of compiling and linking the project. Un fichier PDB est créé lorsque vous compilez un programme C/C++ avec /Zi ou /Zi ou un Visual BasicVisual Basic, Visual C#Visual C#, ou JScript programmer avec le /debug option.A PDB file is created when you compile a C/C++ program with /ZI or /Zi or a Visual BasicVisual Basic, Visual C#Visual C#, or JScript program with the /debug option. Fichiers objets contiennent des références dans le fichier .pdb pour les informations de débogage.Object files contain references into the .pdb file for debugging information. Pour plus d’informations sur les fichiers pdb, consultez fichiers PDB.For more information on pdb files, see PDB Files. Une application de DIA peut utiliser les étapes générales suivantes pour obtenir des détails sur les symboles de différents, les objets et les éléments de données dans une image exécutable.A DIA application can use the following general steps to obtain details about the various symbols, objects, and data elements within an executable image.

Pour interroger le fichier .pdbTo query the .pdb file

  1. Acquérir une source de données en créant un IDiaDataSource interface.Acquire a data source by creating an IDiaDataSource interface.

    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 les informations de débogage.Call IDiaDataSource::loadDataFromPdb or IDiaDataSource::loadDataForExe to load the debugging information.

    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 un IDiaSession pour accéder aux informations de débogage.Call IDiaDataSource::openSession to open an IDiaSession to gain access to the debugging information.

    CComPtr<IDiaSession> psession;  
    if ( FAILED( pSource->openSession( &psession ) ) )   
    {  
        Fatal( "openSession" );  
    }  
    
  4. Utilisez les méthodes de IDiaSession pour rechercher des symboles dans la source de données.Use the methods in IDiaSession to query for the symbols in the data source.

    CComPtr<IDiaSymbol> pglobal;  
    if ( FAILED( psession->get_globalScope( &pglobal) ) )  
    {  
        Fatal( "get_globalScope" );  
    }  
    
  5. Utilisez le IDiaEnum* interfaces d’énumérer et d’analyser les symboles ou d’autres éléments des informations de débogage.Use the IDiaEnum* interfaces to enumerate and scan through the symbols or other elements of debug information.

    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 aussiSee Also

IDiaDataSourceIDiaDataSource