共用方式為


IDiaLineNumber

存取告訴您,從對應的圖像文字的位元組區塊至來源檔案的行數的程序的資訊。

IDiaLineNumber : IUnknown

方法 Vtable 順序

下表顯示的方法IDiaLineNumber

方法

描述

IDiaLineNumber::get_compiland

擷取的貢獻圖像文字的位元組的編譯符號的參考。

IDiaLineNumber::get_sourceFile

擷取來源的檔案物件的參考。

IDiaLineNumber::get_lineNumber

擷取原始程式檔中的行號。

IDiaLineNumber::get_lineNumberEnd

擷取一為基礎的來源行號結束的陳述式或運算式。

IDiaLineNumber::get_columnNumber

擷取運算式或陳述式的開始處的資料行數目。

IDiaLineNumber::get_columnNumberEnd

擷取運算式或陳述式的結束處的資料行數目。

IDiaLineNumber::get_addressSection

擷取區塊的開始處的記憶體位址中區段的一部份。

IDiaLineNumber::get_addressOffset

擷取一個區塊的開始處的記憶體位址的位移的部分。

IDiaLineNumber::get_relativeVirtualAddress

擷取的映像相對虛擬位址 (RVA) 的區塊。

IDiaLineNumber::get_virtualAddress

擷取一個區塊的虛擬位址 (VA)。

IDiaLineNumber::get_length

擷取區塊中的位元組的數目。

IDiaLineNumber::get_sourceFileId

擷取貢獻此行的原始程式檔的唯一來源檔案識別碼。

IDiaLineNumber::get_statement

會擷取旗標,表示這個行資訊說明程式原始碼中的陳述式的開頭。

IDiaLineNumber::get_compilandId

擷取貢獻此行的編譯的唯一識別項。

備註

呼叫者的備忘稿

取得這個介面,藉由呼叫IDiaEnumLineNumbers::ItemIDiaEnumLineNumbers::Next方法。

範例

下列函式會顯示在功能上使用的行號 (由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;
                }
            }
        }
    }
}

需求

標頭: Dia2.h

媒體櫃: diaguids.lib

DLL: msdia80.dll

請參閱

參考

IDiaEnumLineNumbers

IDiaEnumLineNumbers::Item

IDiaEnumLineNumbers::Next

其他資源

介面 (偵錯介面存取 SDK)