Udostępnij za pośrednictwem


Podczas badania.Plik PDB

Plik bazy danych programu (rozszerzeniem .pdb) jest plik binarny, który zawiera typ i symboliczne debugowania informacji zebranych w czasie kompilacji i łączenie projektu.Plik PDB jest tworzony podczas kompilowania program c i C++ z /ZI lub /Zi lub Visual Basic, Visual C#, lub JScript programu z /debug opcji.Obiekt pliki zawierają odwołania do pliku .pdb dla informacji debugowania.Aby uzyskać więcej informacji dotyczących plików pdb, zobacz [OBSOLETE] Pliki bazy danych programu (C++).Aplikacja DIA można użyć następujące ogólne kroki, aby uzyskać szczegółowe informacje dotyczące różnych symboli, obiektów i elementów danych w obrębie obrazu wykonywalnego.

Aby wykonać kwerendę dotyczącą pliku .pdb

  1. Nabycia źródła danych, tworząc IDiaDataSource interfejsu.

    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. Wywołanie IDiaDataSource::loadDataFromPdb lub IDiaDataSource::loadDataForExe do załadowania informacji o debugowaniu.

    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. Wywołanie IDiaDataSource::openSession otworzyć IDiaSession celu uzyskania dostępu do informacji o debugowaniu.

    CComPtr<IDiaSession> psession;
    if ( FAILED( pSource->openSession( &psession ) ) ) 
    {
        Fatal( "openSession" );
    }
    
  4. Użyj metody w IDiaSession do kwerendy dla symboli w źródle danych.

        CComPtr<IDiaSymbol> pglobal;
        if ( FAILED( psession->get_globalScope( &pglobal) ) )
        {
            Fatal( "get_globalScope" );
        }
    
  5. Użyj IDiaEnum* informacje debugowania interfejsów wyliczanie i skanowanie za pomocą symboli lub innych elementów.

    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.
    }
    

Zobacz też

Informacje

IDiaDataSource