IDiaLineNumber
Uzyskuje dostęp do informacji opisujących proces mapowania z bloku bajtów tekstu obrazu na numer wiersza pliku źródłowego.
Składnia
IDiaLineNumber : IUnknown
Metody w tabeli Vtable Order
W poniższej tabeli przedstawiono metody .IDiaLineNumber
Metoda | opis |
---|---|
IDiaLineNumber::get_compiland | Pobiera odwołanie do symbolu compiland, który przyczynił się do bajtów tekstu obrazu. |
IDiaLineNumber::get_sourceFile | Pobiera odwołanie do obiektu pliku źródłowego. |
IDiaLineNumber::get_lineNumber | Pobiera numer wiersza w pliku źródłowym. |
IDiaLineNumber::get_lineNumberEnd | Pobiera jednokierunkowy numer wiersza źródłowego, w którym kończy się instrukcja lub wyrażenie. |
IDiaLineNumber::get_columnNumber | Pobiera numer kolumny, w której rozpoczyna się wyrażenie lub instrukcja. |
IDiaLineNumber::get_columnNumberEnd | Pobiera numer kolumny, w której kończy się wyrażenie lub instrukcja. |
IDiaLineNumber::get_addressSection | Pobiera część sekcji adresu pamięci, w której rozpoczyna się blok. |
IDiaLineNumber::get_addressOffset | Pobiera część przesunięcia adresu pamięci, w której rozpoczyna się blok. |
IDiaLineNumber::get_relativeVirtualAddress | Pobiera względny adres wirtualny obrazu (RVA) bloku. |
IDiaLineNumber::get_virtualAddress | Pobiera adres wirtualny (VA) bloku. |
IDiaLineNumber::get_length | Pobiera liczbę bajtów w bloku. |
IDiaLineNumber::get_sourceFileId | Pobiera unikatowy identyfikator pliku źródłowego dla pliku źródłowego, który przyczynił się do tego wiersza. |
IDiaLineNumber::get_statement | Pobiera flagę wskazującą, że informacje w tym wierszu opisują początek instrukcji w źródle programu. |
IDiaLineNumber::get_compilandId | Pobiera unikatowy identyfikator pliku compiland, który przyczynił się do tego wiersza. |
Uwagi
Uwagi dotyczące wywoływania
Uzyskaj ten interfejs, wywołując metody IDiaEnumLineNumbers::Item lub IDiaEnumLineNumbers::Next .
Przykład
Poniższa funkcja wyświetla numery wierszy używane w funkcji (reprezentowane przez pSymbol
funkcję ).
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
Biblioteka: diaguids.lib
BIBLIOTEKA DLL: msdia80.dll