IDiaLineNumber
Обращается к сведения, описывающие процесс сопоставления из блока байтов текст образа на номер линии исходного файла.
IDiaLineNumber : IUnknown
Методы в том порядке Vtable
В следующей таблице показаны методы IDiaLineNumber.
Метод |
Описание |
---|---|
Извлекает ссылку на символ для compiland, использованное байты текст образа. |
|
Извлекает ссылку на объект из исходного файла. |
|
Получает номер линии в файле источника. |
|
Получает смещение номер линии источника, когда оператор или выражение. |
|
Получает номер столбца, в котором начинается выражение или оператор. |
|
Получает номер столбца, в котором выражение или оператор. |
|
Извлекает часть раздела адреса памяти, где начинается блок. |
|
Извлекает часть смещения адреса памяти, где начинается блок. |
|
Получает относительный виртуальный адрес образа (RVA) блока. |
|
Получает виртуальный адрес (VA) блока. |
|
Извлекает число байтов в блоке. |
|
Извлекает уникальный идентификатор исходного файла для файла источника, способствовал эту линию. |
|
Извлекает пометить указывающее, что эти данные линий, описывающих начало выписки в источнике программы. |
|
Извлекает уникальный идентификатор для compiland, использованное эту линию. |
Заметки
Замечания для вызывающих объектов
Для получения этого интерфейса нужно вызвать метод IDiaEnumLineNumbers::Item OR IDiaEnumLineNumbers::Next методы.
Пример
Следующие номера выделительнаяа строка функции, используемые в функции (представленных by 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;
}
}
}
}
}
Требования
Заголовок: Dia2.h
Библиотеки: diaguids.lib
Библиотеки DLL: msdia80.dll