查詢 .Pdb 檔案
程式資料庫檔案 (副檔名.pdb) 是包含型別,並經過一段編譯和連結的專案所收集到的符號偵錯資訊的二進位檔案。 當您編譯的 C/C++ 程式,建立 PDB 檔**/ZI或/Zi或Visual Basic, Visual C#,或JScript 「 節目/debug**選項。 目的檔包含到偵錯資訊的.pdb 檔的參照。 如需有關 pdb 檔的詳細資訊,請參閱[OBSOLETE] 程式資料庫檔案 (C++)。 DIA 應用程式可以使用下列一般步驟,以取得有關各種不同的符號、 物件和可執行檔映像中的資料元素的詳細資訊。
若要查詢的.pdb 檔
取得資料來源,藉由建立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." ); }
呼叫IDiaDataSource::loadDataFromPdb或IDiaDataSource::loadDataForExe載入偵錯資訊。
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" ); } }
呼叫IDiaDataSource::openSession開啟IDiaSession能夠存取偵錯資訊。
CComPtr<IDiaSession> psession; if ( FAILED( pSource->openSession( &psession ) ) ) { Fatal( "openSession" ); }
使用中的方法IDiaSession來查詢資料來源中的符號。
CComPtr<IDiaSymbol> pglobal; if ( FAILED( psession->get_globalScope( &pglobal) ) ) { Fatal( "get_globalScope" ); }
使用**IDiaEnum***介面,來列舉並掃描中的符號或其他元素的偵錯資訊。
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. }