IDiaLineNumber
Accede alle informazioni che descrivono il processo di mapping da un blocco di byte di testo immagine a un numero di riga del file di origine.
Sintassi
IDiaLineNumber : IUnknown
Metodi nell'ordine Vtable
Nella tabella seguente vengono illustrati i metodi di IDiaLineNumber
.
metodo | Descrizione |
---|---|
IDiaLineNumber::get_compiland | Recupera un riferimento al simbolo per il compiland che ha contribuito ai byte del testo dell'immagine. |
IDiaLineNumber::get_sourceFile | Recupera un riferimento all'oggetto file di origine. |
IDiaLineNumber::get_lineNumber | Recupera il numero di riga nel file di origine. |
IDiaLineNumber::get_lineNumberEnd | Recupera il numero di riga di origine in base uno in cui termina l'istruzione o l'espressione. |
IDiaLineNumber::get_columnNumber | Recupera il numero di colonna in cui inizia l'espressione o l'istruzione. |
IDiaLineNumber::get_columnNumberEnd | Recupera il numero di colonna in cui termina l'espressione o l'istruzione. |
IDiaLineNumber::get_addressSection | Recupera la parte della sezione dell'indirizzo di memoria in cui inizia un blocco. |
IDiaLineNumber::get_addressOffset | Recupera la parte offset dell'indirizzo di memoria in cui inizia un blocco. |
IDiaLineNumber::get_relativeVirtualAddress | Recupera l'indirizzo virtuale relativo dell'immagine di un blocco. |
IDiaLineNumber::get_virtualAddress | Recupera l'indirizzo virtuale (VA) di un blocco. |
IDiaLineNumber::get_length | Recupera il numero di byte in un blocco. |
IDiaLineNumber::get_sourceFileId | Recupera un identificatore univoco del file di origine per il file di origine che ha contribuito a questa riga. |
IDiaLineNumber::get_statement | Recupera un flag che indica che queste informazioni sulla riga descrivono l'inizio di un'istruzione nell'origine del programma. |
IDiaLineNumber::get_compilandId | Recupera l'identificatore univoco per il compiland che ha contribuito a questa riga. |
Osservazioni:
Note per i chiamanti
Ottenere questa interfaccia chiamando i metodi IDiaEnumLineNumbers::Item o IDiaEnumLineNumbers::Next .
Esempio
La funzione seguente visualizza i numeri di riga usati in una funzione (rappresentata da 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;
}
}
}
}
}
Requisiti
Intestazione: Dia2.h
Libreria: diaguids.lib
DLL: msdia80.dll