Freigeben über


Abfragen der PDB-Datei

Eine Programmdatenbankdatei (Erweiterung .pdb) handelt es sich um eine Binärdatei, die den Typ und symbolischen Debuginformationen enthält, die im Verlauf des Kompilierens und des Verknüpfens des Projekts gesammelt werden.Eine PDB-Datei wird erstellt, wenn Sie mit /ZI Ein Programm oder /Zi /C ++ oder Visual Basic, Visual C#oder JScript Programm mit der /debug Option kompilieren.Objektdateien enthalten Verweise in die PDB-Datei für Debuginformationen.Weitere Informationen zu VEH-Dateien finden Sie unter [OBSOLETE] Programmdatenbankdateien (C++).Eine Durchmesser-Anwendung kann die folgenden allgemeinen Schritte ausführen, um ausführliche Informationen zu erhalten, die Symbole über die verschiedenen Objekte und die Datenelemente innerhalb eines ausführbaren Images.

Um die PDB-Datei abfragen

  1. Ruft eine Datenquelle ab, indem Sie eine IDiaDataSource-Schnittstelle erstellen.

    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. Rufen Sie IDiaDataSource::loadDataFromPdb oder IDiaDataSource::loadDataForExe auf, um die Debuginformationen zu laden.

    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. Rufen Sie IDiaDataSource::openSession auf, um IDiaSession zu öffnen, um Debuginformationen zu erhalten.

    CComPtr<IDiaSession> psession;
    if ( FAILED( pSource->openSession( &psession ) ) ) 
    {
        Fatal( "openSession" );
    }
    
  4. Verwenden Sie die Methoden in IDiaSession verwendet, um die Symbole in der Datenquelle abzufragen.

        CComPtr<IDiaSymbol> pglobal;
        if ( FAILED( psession->get_globalScope( &pglobal) ) )
        {
            Fatal( "get_globalScope" );
        }
    
  5. Verwenden Sie die IDiaEnum*-Schnittstellen, um die Symbole oder andere Elemente von Debuginformationen aufzulisten und zu überprüfen.

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

Siehe auch

Referenz

IDiaDataSource