.Pdb ファイルの照会
プログラム データベース ファイル (拡張子 .pdb) ではプロジェクトをコンパイルおよびリンク中に収集された型とシンボリック デバッグ情報を格納するバイナリ ファイルです。 PDB ファイルは /debug オプションの /ZI C. /C ファイルをプログラムに /Zi または Visual BasicVisual C#または JScript のプログラム コンパイル時に作成されます。 オブジェクト ファイルはデバッグ情報の .pdb ファイルへの参照が含まれています。 pdb ファイルの詳細については[廃止] プログラム データベース ファイル (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" ); } }
IDiaSession をデバッグ情報にアクセスするために開くように IDiaDataSource::openSession を呼び出します。
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. }