IDiaLineNumber
Acessa informações que descrevem o processo de mapeamento de um bloco de bytes do texto de imagem para um número de linha do arquivo de origem.
Sintaxe
IDiaLineNumber : IUnknown
Métodos na ordem VTable
A tabela a seguir mostra os métodos de IDiaLineNumber
.
Método | Descrição |
---|---|
IDiaLineNumber::get_compiland | Recupera uma referência ao símbolo do compiland que contribuiu com os bytes do texto da imagem. |
IDiaLineNumber::get_sourceFile | Recupera uma referência ao objeto do arquivo de origem. |
IDiaLineNumber::get_lineNumber | Recupera o número de linha no arquivo de origem. |
IDiaLineNumber::get_lineNumberEnd | Recupera o número de linha de origem baseado em um onde a instrução ou expressão termina. |
IDiaLineNumber::get_columnNumber | Recupera o número da coluna em que a expressão ou instrução começa. |
IDiaLineNumber::get_columnNumberEnd | Recupera o número da coluna em que a expressão ou instrução termina. |
IDiaLineNumber::get_addressSection | Recupera a parte da seção do endereço de memória em que um bloco começa. |
IDiaLineNumber::get_addressOffset | Recupera a parte de deslocamento do endereço de memória em que um bloco começa. |
IDiaLineNumber::get_relativeVirtualAddress | Recupera o RVA (endereço virtual relativo) da imagem de um bloco. |
IDiaLineNumber::get_virtualAddress | Recupera o VA (endereço virtual) de um bloco. |
IDiaLineNumber::get_length | Recupera o número de bytes em um bloco. |
IDiaLineNumber::get_sourceFileId | Recupera um identificador de arquivo de origem exclusivo para o arquivo de origem que contribuiu com essa linha. |
IDiaLineNumber::get_statement | Recupera um sinalizador que indica que essas informações de linha descrevem o início de uma instrução na origem do programa. |
IDiaLineNumber::get_compilandId | Recupera o identificador exclusivo para o compiland que contribuiu com essa linha. |
Comentários
Observações para chamadores
Obtenha essa interface chamando os métodos IDiaEnumLineNumbers::Item ou IDiaEnumLineNumbers::Next.
Exemplo
A função a seguir exibe números de linha usados em uma função (representada por 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;
}
}
}
}
}
Requisitos
Cabeçalho: Dia2.h
Biblioteca: diaguids.lib
DLL: msdia80.dll