Freigeben über


IDiaLineNumber

Greift auf Informationen, die den Prozess der Zuordnung einer Byteblock Bild von Text in einer Quelldatei Zeilennummer für beschreibt.

IDiaLineNumber : IUnknown

Methoden in die Vtable-Reihenfolge

In der folgenden Tabelle werden die Methoden von IDiaLineNumberan.

Methode

Beschreibung

IDiaLineNumber::get_compiland

Ruft einen Verweis auf das Symbol für die Kompiliereinheit ab, die die Bytes Bild von Text beitrug.

IDiaLineNumber::get_sourceFile

Ruft einen Verweis auf die Quelldatei Objekt ab.

IDiaLineNumber::get_lineNumber

Ruft die Zeilennummer in der Quelldatei ab.

IDiaLineNumber::get_lineNumberEnd

Die 1-basierte Quellzeilen Zahl in der die Anweisungen oder enden Ausdrucks abruft.

IDiaLineNumber::get_columnNumber

Ruft die Spaltennummer ab, in der der Ausdruck oder die Anweisung begonnen wird.

IDiaLineNumber::get_columnNumberEnd

Die Spaltennummer in der die Ausdrucks- oder Anweisung beendet wird.

IDiaLineNumber::get_addressSection

Ruft den Teil der Speicheradresse Abschnitts ab, in der ein Block beginnt.

IDiaLineNumber::get_addressOffset

Ruft den Offset Teil der Speicheradresse ab, in der ein Block beginnt.

IDiaLineNumber::get_relativeVirtualAddress

Ruft die relative virtuelle Adresse des Bildes (RVA) eines Blocks 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 Bezeichner für eine Quelldatei für die Quelldatei ab, die diese Zeile beitrug.

IDiaLineNumber::get_statement

Ruft ein Flag ab, das angibt, dass die Zeileninformationen den Anfang einer Anweisung in der Quelle des Programms beschrieben.

IDiaLineNumber::get_compilandId

Ruft den eindeutigen Bezeichner der Kompiliereinheit ab, die diese Zeile beitrug.

Hinweise

Hinweise für Aufrufer

Rufen Sie diese Schnittstelle, indem sie die IDiaEnumLineNumbers::Item oder IDiaEnumLineNumbers::Next-Methoden aufgerufen werden.

Beispiel

Die folgende Funktion werden die Zeilennummern an, die in einer Funktion verwendet werden (dargestellt 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

DLLs: msdia80.dll

Siehe auch

Referenz

IDiaEnumLineNumbers

IDiaEnumLineNumbers::Item

IDiaEnumLineNumbers::Next

Weitere Ressourcen

Schnittstellen (Debug Interface Access SDK)