IDiaLineNumber
Uzyskuje dostęp do informacji w tym artykule opisano proces mapowania z bloku bajtów tekstu obraz do numeru wiersza źródłowego pliku.
IDiaLineNumber : IUnknown
Metody w kolejności Vtable
W poniższej tabeli przedstawiono metody IDiaLineNumber.
Metoda |
Opis |
---|---|
Pobiera odwołanie do symbolu dla compiland, który wpłynął bajtów obrazu tekst. |
|
Pobiera odwołanie do obiektu pliku źródłowego. |
|
Pobiera numer wiersza w pliku źródłowym. |
|
Pobiera numer wiersza źródła dostępny od jedynki, gdzie kończy się oświadczenie lub wyrażenie. |
|
Pobiera numer kolumny, w którym rozpoczyna się wyrażenia lub instrukcji. |
|
Pobiera numer kolumny, w którym kończy się wyrażenia lub instrukcji. |
|
Pobiera część sekcji adresu pamięci, gdzie rozpoczyna się w bloku. |
|
Pobiera przesunięcia część adresu pamięci, gdzie rozpoczyna się w bloku. |
|
Pobiera obraz wirtualny adres względny (RVA) bloku. |
|
Pobiera adres wirtualny (VA) bloku. |
|
Pobiera liczbę bajtów w bloku. |
|
Pobiera identyfikator pliku źródłowego unikatowe dla pliku źródłowego, które przyczyniły się do tego wiersza. |
|
Pobiera flaga oznaczająca, że te informacje opisuje początku instrukcji w źródłowym programu. |
|
Pobiera identyfikator unikatowy dla compiland, która przyczyniła się do tego wiersza. |
Uwagi
Uwagi do wywoływania
Ten interfejs uzyskać, wywołując IDiaEnumLineNumbers::Item lub IDiaEnumLineNumbers::Next metody.
Przykład
Następująca funkcja wyświetla numery wierszy, używany w funkcji (reprezentowane przez pSymbol).
void dumpFunctionLines( IDiaSymbol* pSymbol, IDiaSession* pSession )
{
ULONGLONG length = 0;
DWORD isect = 0;
DWORD offset = 0;
pSymbol->get_addressSection( &isect );
pSymbol->get_addressOffset( &offset );
pSymbol->get_length( &length );
if ( isect != 0 && length > 0 )
{
CComPtr< IDiaEnumLineNumbers > pLines;
if ( SUCCEEDED( pSession->findLinesByAddr(
isect,
offset,
static_cast<DWORD>( length ),
&pLines)
)
)
{
CComPtr< IDiaLineNumber > pLine;
DWORD celt = 0;
bool firstLine = true;
while ( SUCCEEDED( pLines->Next( 1, &pLine, &celt ) ) &&
celt == 1 )
{
DWORD offset;
DWORD seg;
DWORD linenum;
CComPtr< IDiaSymbol > pComp;
CComPtr< IDiaSourceFile > pSrc;
pLine->get_compiland( &pComp );
pLine->get_sourceFile( &pSrc );
pLine->get_addressSection( &seg );
pLine->get_addressOffset( &offset );
pLine->get_lineNumber( &linenum );
printf( "\tline %d at 0x%x:0x%x\n", linenum, seg, offset );
pLine = NULL;
if ( firstLine )
{
// sanity check
CComPtr< IDiaEnumLineNumbers > pLinesByLineNum;
if ( SUCCEEDED( pSession->findLinesByLinenum(
pComp,
pSrc,
linenum,
0,
&pLinesByLineNum)
)
)
{
CComPtr< IDiaLineNumber > pLine;
DWORD celt;
while ( SUCCEEDED( pLinesByLineNum->Next( 1, &pLine, &celt ) ) &&
celt == 1 )
{
DWORD offset;
DWORD seg;
DWORD linenum;
pLine->get_addressSection( &seg );
pLine->get_addressOffset( &offset );
pLine->get_lineNumber( &linenum );
printf( "\t\tfound line %d at 0x%x:0x%x\n", linenum, seg, offset );
pLine = NULL;
}
}
firstLine = false;
}
}
}
}
}
Wymagania
Nagłówek: Dia2.h
Biblioteki: diaguids.lib
Biblioteka DLL: msdia80.dll