IDiaLineNumber
Greift auf Informationen zu, die den Vorgang der Zuordnung eines Byteblocks des Imagetexts zur Zeilennummer einer Quelldatei beschreiben.
Syntax
IDiaLineNumber : IUnknown
Methoden in Vtable-Reihenfolge
In der folgenden Tabelle sind die Methoden von IDiaLineNumber
aufgeführt.
Methode | BESCHREIBUNG |
---|---|
IDiaLineNumber::get_compiland | Ruft einen Verweis auf das Symbol für die Kompiliereinheit ab, die die Bytes zum Imagetext beigetragen hat. |
IDiaLineNumber::get_sourceFile | Ruft einen Verweis auf das Quelldateiobjekt ab. |
IDiaLineNumber::get_lineNumber | Ruft die Zeilennummer in der Quelldatei ab. |
IDiaLineNumber::get_lineNumberEnd | Ruft die 1-basierte Zeilennummer im Quellcode ab, an der die Anweisung oder der Ausdruck endet. |
IDiaLineNumber::get_columnNumber | Ruft die Nummer der Spalte ab, bei der der Ausdruck oder die Anweisung beginnt. |
IDiaLineNumber::get_columnNumberEnd | Ruft die Spaltennummer ab, in der der Ausdruck oder die Anweisung endet. |
IDiaLineNumber::get_addressSection | Ruft den Abschnittsteil der Speicheradresse ab, an der ein Block beginnt. |
IDiaLineNumber::get_addressOffset | Ruft den Offsetteil der Speicheradresse ab, an der ein Block beginnt. |
IDiaLineNumber::get_relativeVirtualAddress | Ruft die virtuelle Adresse eines Blocks relativ zum Image (RVA) ab. |
IDiaLineNumber::get_virtualAddress | Ruft die virtuelle Adresse (VA) eines Blocks ab. |
IDiaLineNumber::get_length | Ruft die Anzahl der Bytes in einem Block ab. |
IDiaLineNumber::get_sourceFileId | Ruft einen eindeutigen Quelldateibezeichner für die Quelldatei ab, die diese Zeile beigetragen hat. |
IDiaLineNumber::get_statement | Ruft ein Flag ab, das anzeigt, dass diese Zeileninformationen den Beginn einer Anweisung in der Programmquelle beschreiben. |
IDiaLineNumber::get_compilandId | Ruft den eindeutigen Bezeichner für die Kompiliereinheit ab, die diese Zeile beigetragen hat. |
Bemerkungen
Hinweise für Aufrufer
Sie erhalten diese Schnittstelle durch Aufruf der Methoden IDiaEnumLineNumbers::Item oder IDiaEnumLineNumbers::Next.
Beispiel
Die folgende Funktion zeigt Zeilennummern an, die in einer Funktion verwendet werden (repräsentiert durch 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;
}
}
}
}
}
Anforderungen
Header: Dia2.h
Bibliothek: diaguids.lib
DLL: msdia80.dll