다음을 통해 공유


.Pdb 파일 쿼리

프로그램 데이터베이스 파일(확장명 .pdb)은 프로젝트를 컴파일하고 연결하는 과정에서 수집된 형식 및 기호화된 디버깅 정보를 포함하는 이진 파일입니다. PDB 파일은 /ZI 또는 /Zi를 사용하여 C/C++ 프로그램을 컴파일하거나 /debug 옵션을 사용하여 Visual Basic, Visual C# 또는 JScript 프로그램을 컴파일할 때 생성됩니다. 개체 파일에는 디버깅 정보를 위해 .pdb 파일에 대한 참조가 포함됩니다. pdb 파일에 대한 자세한 내용은 PDB 파일을 참조하세요. DIA 애플리케이션은 다음과 같은 일반적인 단계를 사용하여 실행 가능 이미지 내의 다양한 기호, 개체, 데이터 요소에 대한 세부 정보를 가져올 수 있습니다.

.pdb 파일을 쿼리하려면

  1. 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." );
    }
    
  2. 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" );
        }
    }
    
  3. 디버깅 정보에 액세스할 수 있도록 IDiaDataSource::openSession을 호출하여 IDiaSession을 엽니다.

    CComPtr<IDiaSession> psession;
    if ( FAILED( pSource->openSession( &psession ) ) )
    {
        Fatal( "openSession" );
    }
    
  4. IDiaSession의 메서드를 사용하여 데이터 소스에서 기호를 쿼리합니다.

    CComPtr<IDiaSymbol> pglobal;
    if ( FAILED( psession->get_globalScope( &pglobal) ) )
    {
        Fatal( "get_globalScope" );
    }
    
  5. 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.
    }
    

참고 항목