IDiaLineNumber
Обращается к сведениям, описывающим процесс сопоставления из блока байтов текста изображения с номером строки исходного файла.
Синтаксис
IDiaLineNumber : IUnknown
Методы в порядке таблицы Vtable
В следующей таблице показаны методы IDiaLineNumber
.
Метод | Description |
---|---|
IDiaLineNumber::get_compiland | Извлекает ссылку на символ компилятора, который внес байты текста изображения. |
IDiaLineNumber::get_sourceFile | Извлекает ссылку на объект исходного файла. |
IDiaLineNumber::get_lineNumber | Извлекает номер строки в исходном файле. |
IDiaLineNumber::get_lineNumberEnd | Извлекает номер одноуровневой исходной строки, в которой заканчивается оператор или выражение. |
IDiaLineNumber::get_columnNumber | Извлекает номер столбца, в котором начинается выражение или оператор. |
IDiaLineNumber::get_columnNumberEnd | Извлекает номер столбца, в котором заканчивается выражение или оператор. |
IDiaLineNumber::get_addressSection | Извлекает часть раздела адреса памяти, в котором начинается блок. |
IDiaLineNumber::get_addressOffset | Извлекает часть смещения адреса памяти, в которой начинается блок. |
IDiaLineNumber::get_relativeVirtualAddress | Извлекает относительный виртуальный адрес образа (RVA) блока. |
IDiaLineNumber::get_virtualAddress | Извлекает виртуальный адрес (VA) блока. |
IDiaLineNumber::get_length | Извлекает количество байтов в блоке. |
IDiaLineNumber::get_sourceFileId | Извлекает уникальный идентификатор исходного файла для исходного файла, который внес эту строку. |
IDiaLineNumber::get_statement | Извлекает флаг, указывающий, что эта строка описывает начало инструкции в источнике программы. |
IDiaLineNumber::get_compilandId | Извлекает уникальный идентификатор компилятора, который внес эту строку. |
Замечания
Заметки для вызывающих абонентов
Получите этот интерфейс, вызвав методы IDiaEnumLineNumbers::Item или IDiaEnumLineNumbers::Next .
Пример
В следующей функции отображаются номера строк, используемые в функции (представленные 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;
}
}
}
}
}
Requirements
Заголовок: Dia2.h
Библиотека: diaguids.lib
DLL: msdia80.dll