.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
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." ); }
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" ); } }
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" ); }
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" ); }
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.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin