IDiaLineNumber
Acessa informações que descreve o processo de mapeamento de um bloco de bytes de texto da imagem para um número de linha do arquivo de origem.
IDiaLineNumber : IUnknown
Métodos na ordem de Vtable
A tabela a seguir mostra os métodos de IDiaLineNumber.
Método |
Descrição |
---|---|
Recupera uma referência para o símbolo para o compiland que contribuiu com os bytes do texto da imagem. |
|
Recupera uma referência ao objeto de arquivo de origem. |
|
Recupera o número de linha no arquivo de origem. |
|
Recupera o número de linha com base em uma fonte onde a instrução ou expressão termina. |
|
Recupera o número da coluna onde a expressão ou instrução começa. |
|
Recupera o número da coluna onde a expressão ou instrução termina. |
|
Recupera a parte da seção de endereço de memória onde começa a um bloco. |
|
Recupera a compensação parte do endereço de memória onde começa a um bloco. |
|
Recupera o imagem endereço virtual relativo (RVA) de um bloco. |
|
Recupera o endereço virtual (VA) de um bloco. |
|
Recupera o número de bytes em um bloco. |
|
Recupera um identificador de arquivo de origem de forma exclusiva para o arquivo de origem que contribuíram com esta linha. |
|
Recupera um sinalizador que indica que essa informação de linha descreve o início de uma instrução na origem do programa. |
|
Recupera o identificador exclusivo para o compiland que contribuiu com esta linha. |
Comentários
Observações para chamadores
Obter essa interface chamando o IDiaEnumLineNumbers::Item ou IDiaEnumLineNumbers::Next métodos.
Exemplo
A função a seguir exibe os números de linha usados em uma função (representado 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