Aracılığıyla paylaş


.Pdb Dosyasını Sorgulama

Program veritabanı dosyası (uzantı .pdb), projeyi derleme ve bağlama işlemi boyunca toplanan tür ve sembolik hata ayıklama bilgilerini içeren bir ikili dosyadır. /ZI veya /Zi ile bir C/C++ programı ya da /debug seçeneğiyle Visual Basic, Visual C# veya JScript programı derlediğinizde bir PDB dosyası oluşturulur. Nesne dosyaları hata ayıklama bilgileri için .pdb dosyasına başvurular içerir. Pdb dosyaları hakkında daha fazla bilgi için bkz . PDB Dosyaları. DIA uygulaması yürütülebilir görüntüdeki çeşitli simgeler, nesneler ve veri öğeleri hakkında ayrıntılı bilgi edinmek için aşağıdaki genel adımları kullanabilir.

.pdb dosyasını sorgulamak için

  1. IDiaDataSource arabirimi oluşturarak bir veri kaynağı alın.

    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. Hata ayıklama bilgilerini yüklemek için IDiaDataSource::loadDataFromPdb veya IDiaDataSource::loadDataForExe çağrısı yapı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. Hata ayıklama bilgilerine erişmek için bir IDiaSession açmak için IDiaDataSource::openSession öğesini çağırın.

    CComPtr<IDiaSession> psession;
    if ( FAILED( pSource->openSession( &psession ) ) )
    {
        Fatal( "openSession" );
    }
    
  4. Veri kaynağındaki sembolleri sorgulamak için içindeki IDiaSession yöntemlerini kullanın.

    CComPtr<IDiaSymbol> pglobal;
    if ( FAILED( psession->get_globalScope( &pglobal) ) )
    {
        Fatal( "get_globalScope" );
    }
    
  5. IDiaEnum* Arabirimleri kullanarak hata ayıklama bilgilerinin sembollerini veya diğer öğelerini numaralandırın ve tarayı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.
    }
    

Ayrıca bkz.