IDiaLineNumber
Obtiene acceso a la información que describe el proceso de asignación de un bloque de bytes de texto de imagen a un número de línea de archivo de origen.
Sintaxis
IDiaLineNumber : IUnknown
Métodos en orden de Vtable
En la tabla siguiente se muestran los métodos de IDiaLineNumber
.
Método | Descripción |
---|---|
IDiaLineNumber::get_compiland | Recupera una referencia al símbolo del compilado que contribuyó a los bytes del texto de la imagen. |
IDiaLineNumber::get_sourceFile | Recupera una referencia al objeto del archivo de origen. |
IDiaLineNumber::get_lineNumber | Recupera el número de línea del archivo de origen. |
IDiaLineNumber::get_lineNumberEnd | Recupera el número de línea de origen basado en uno donde finaliza la instrucción o expresión. |
IDiaLineNumber::get_columnNumber | Recupera el número de columna donde comienza la expresión o instrucción. |
IDiaLineNumber::get_columnNumberEnd | Recupera el número de columna donde finaliza la expresión o instrucción. |
IDiaLineNumber::get_addressSection | Recupera la parte de sección de la dirección de memoria donde comienza un bloque. |
IDiaLineNumber::get_addressOffset | Recupera la parte de desplazamiento de la dirección de memoria donde comienza un bloque. |
IDiaLineNumber::get_relativeVirtualAddress | Recupera la imagen de dirección virtual relativa (RVA) de un bloque. |
IDiaLineNumber::get_virtualAddress | Recupera la dirección virtual (VA) de un bloque. |
IDiaLineNumber::get_length | Recupera el número de bytes de un bloque. |
IDiaLineNumber::get_sourceFileId | Recupera un identificador de archivo de origen único para el archivo de origen que ha contribuido a esta línea. |
IDiaLineNumber::get_statement | Recupera una marca que indica que esta información de línea describe el principio de una instrucción en el origen del programa. |
IDiaLineNumber::get_compilandId | Recupera el identificador único del compilado que ha contribuido a esta línea. |
Comentarios
Notas para autores de la llamada
Obtenga esta interfaz llamando a los métodos IDiaEnumLineNumbers::Item o IDiaEnumLineNumbers::Next.
Ejemplo
La siguiente función muestra los números de línea usados en una función (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
Encabezado: Dia2.h
Biblioteca: diaguids.lib
DLL: msdia80.dll