共用方式為


IDiaSymbol

描述符號執行個體的屬性。

語法

IDiaSymbol : IUnknown

依字母順序排列的方法

下表顯示 IDiaSymbol 方法。

注意

符號只會針對其中一些方法傳回有意義的資料,視符號類型而定。 如果方法傳回 S_OK,則該方法已傳回有意義的資料。

方法 描述
IDiaSymbol::findChildren 擷取符號的所有子系。
IDiaSymbol::findChildrenEx 擷取符號的子系。 此方法是 IDiaSymbol::findChildren 的擴充版本。
IDiaSymbol::findChildrenExByAddr 擷取在指定位址上有效的符號子系。
IDiaSymbol::findChildrenExByRVA 擷取在指定相對虛擬位址 (RVA) 上有效符號的子系。
IDiaSymbol::findChildrenExByVA 擷取在指定虛擬位址上有效的符號子系。
IDiaSymbol::findInlineFramesByAddr 擷取列舉,允許用戶端逐一查看指定位址上的所有內嵌框架。
IDiaSymbol::findInlineFramesByRVA 擷取列舉,允許用戶端逐一查看指定相對虛擬位址 (RVA) 上的所有內嵌框架。
IDiaSymbol::findInlineFramesByVA 擷取列舉,允許用戶端逐一查看指定虛擬位址 (VA) 上的所有內嵌框架。
IDiaSymbol::findInlineeLines 擷取列舉,允許用戶端逐一查看此符號中直接或間接內嵌之所有函式的行號資訊。
IDiaSymbol::findInlineeLinesByAddr 擷取列舉,允許用戶端逐一查看此符號在指定位址範圍中,直接或間接內嵌之所有函式的行號資訊。
IDiaSymbol::findInlineeLinesByRVA 擷取列舉,允許用戶端逐一查看此符號在指定相對虛擬位址 (RVA) 中,直接或間接內嵌之所有函式的行號資訊。
IDiaSymbol::findInlineeLinesByVA 擷取列舉,允許用戶端逐一查看此符號在指定虛擬位址 (VA) 中,直接或間接內嵌之所有函式的行號資訊。
IDiaSymbol::findSymbolsByRVAForAcceleratorPointerTag 指定對應的標記值時,此方法會傳回這個虛設常式函式中指定相對虛擬位址中包含的符號列舉。
IDiaSymbol::findSymbolsForAcceleratorPointerTag 傳回 C++ AMP 虛設常式函式中的快速鍵指標標記數目。
IDiaSymbol::get_acceleratorPointerTags 傳回對應至 C++ AMP 加速器虛設常式函式的所有加速器指標標記值。
IDiaSymbol::get_access 擷取類別成員的存取修飾詞。
IDiaSymbol::get_addressOffset 擷取位址位置的位移部分。
IDiaSymbol::get_addressSection 擷取位址位置的區段部分。
IDiaSymbol::get_addressTaken 擷取指出另一個符號是否參考此位址的旗標。
IDiaSymbol::get_age 擷取程式資料庫的存留期值。
IDiaSymbol::get_arrayIndexType 擷取陣列索引類型的符號識別碼。
IDiaSymbol::get_arrayIndexTypeId 擷取符號的陣列索引類型識別碼。
IDiaSymbol::get_backEndMajor 擷取後端主要版本號碼。
IDiaSymbol::get_backEndMinor 擷取後端次要版本號碼。
IDiaSymbol::get_backEndBuild 擷取後端組建編號。
IDiaSymbol::get_baseDataOffset 擷取基底資料位移。
IDiaSymbol::get_baseDataSlot 擷取基底資料位置。
IDiaSymbol::get_baseSymbol 擷取指標所依據的符號。
IDiaSymbol::get_baseSymbolId 擷取指標所依據的符號識別碼。
IDiaSymbol::get_baseType 擷取簡單型別的類型標記。
IDiaSymbol::get_bitPosition 擷取位置的位元位置。
IDiaSymbol::get_builtInKind 擷取 HLSL 類型的內建類型。
IDiaSymbol::get_callingConvention 傳回呼叫慣例之方法的指標。
IDiaSymbol::get_classParent 擷取符號之類別父代的參考。
IDiaSymbol::get_classParentId 擷取符號的類別父識別碼。
IDiaSymbol::get_code 擷取指出符號是否參考程式碼位址的旗標。
IDiaSymbol::get_compilerGenerated 擷取指出符號是否為編譯器產生的旗標。
IDiaSymbol::get_compilerName 擷取用來建立編譯模組的編譯器名稱。
IDiaSymbol::get_constructor 擷取指出使用者定義資料類型是否具有建構函式的旗標。
IDiaSymbol::get_container 擷取此符號的包含符號。
IDiaSymbol::get_constType 擷取指出使用者定義資料類型是否為常數的旗標。
IDiaSymbol::get_count 擷取清單或陣列中的項目數。
IDiaSymbol::get_countLiveRanges 擷取與本機符號相關聯的有效位址範圍數目。
IDiaSymbol::get_customCallingConvention 擷取指出函式是否使用自訂呼叫慣例的旗標。
IDiaSymbol::get_dataBytes 擷取 OEM 符號的資料位元組。
IDiaSymbol::get_dataKind 擷取資料符號的變數分類。
IDiaSymbol::get_editAndContinueEnabled 擷取描述已編譯程式或單元的 [編輯後繼續] 功能的旗標。
IDiaSymbol::get_farReturn 擷取指出函式是否使用 far return 的旗標。
IDiaSymbol::get_frontEndMajor 擷取前端主要版本號碼。
IDiaSymbol::get_frontEndMinor 擷取前端次要版本號碼。
IDiaSymbol::get_frontEndBuild 擷取前端組建編號。
IDiaSymbol::get_function 擷取指出公開符號是否參考函式的旗標。
IDiaSymbol::get_guid 擷取符號的 GUID。
IDiaSymbol::get_hasAlloca 擷取指出函式是否包含對 alloca 呼叫的旗標。
IDiaSymbol::get_hasAssignmentOperator 擷取指出使用者定義資料類型是否定義任何指派運算子的旗標。
IDiaSymbol::get_hasCastOperator 擷取指出使用者定義資料類型是否定義任何轉換運算子的旗標。
IDiaSymbol::get_hasDebugInfo 擷取指出編譯模組是否包含任何偵錯資訊的旗標。
IDiaSymbol::get_hasEH 擷取指出函式是否有 C++樣式例外處理常式的旗標。
IDiaSymbol::get_hasEHa 擷取指出函式是否有非同步例外處理常式的旗標。
IDiaSymbol::get_hasInlAsm 擷取指出函式是否具有內嵌組件的旗標。
IDiaSymbol::get_hasLongJump 擷取指出函式是否包含 longjmp 命令 (C 樣式例外狀況處理的一部分) 的旗標。
IDiaSymbol::get_hasManagedCode 擷取指出模組是否包含受控程式碼的旗標。
IDiaSymbol::get_hasNestedTypes 擷取指出使用者定義資料類型是否具有巢狀型別定義的旗標。
IDiaSymbol::get_hasSecurityChecks 擷取指出函式或編譯模組是否有編譯中的安全性檢查 (透過 /GS (緩衝區安全性檢查) 編譯器參數) 的旗標。
IDiaSymbol::get_hasSEH 擷取指出函式是否有 Win32 樣式結構化例外狀況處理的旗標。
IDiaSymbol::get_hasSetJump 擷取指出函式是否包含 setjmp 命令的旗標。
IDiaSymbol::get_indirectVirtualBaseClass 擷取指出使用者定義資料類型是否為間接虛擬基底類別的旗標。
IDiaSymbol::get_InlSpec 擷取指出函式是否已使用內嵌屬性標記的旗標。
IDiaSymbol::get_interruptReturn 擷取指出函式是否有中斷指令傳回的旗標。
IDiaSymbol::get_intro 擷取指出函式是否為基底類別虛擬函式的旗標。
IDiaSymbol::get_isAcceleratorGroupSharedLocal 擷取旗標,指出符號是否對應至針對 C++ AMP Accelerator 編譯的程式碼中的群組共用區域變數。
IDiaSymbol::get_isAcceleratorPointerTagLiveRange 擷取旗標,指出符號是否對應至為 C++ AMP Accelerator 編譯之程式碼中指標變數標記元件的定義範圍符號。 定義範圍符號是位址範圍的變數位置。
IDiaSymbol::get_isAcceleratorStubFunction 指出符號是否對應至為加速器 (對應於 parallel_for_each 呼叫) 編譯的著色器最上層函式符號。
IDiaSymbol::get_isAggregated 擷取指出資料是否為許多符號彙總一部分的旗標。
IDiaSymbol::get_isCTypes 擷取指出符號檔案是否包含 C 型別的旗標。
IDiaSymbol::get_isCVTCIL 擷取指出模組是否已從通用中間語言 (CIL) 轉換成原生模組的旗標。
IDiaSymbol::get_isDataAligned 擷取指出使用者定義資料類型的元素是否對齊特定界限的旗標。
IDiaSymbol::get_isHLSLData 指定這個符號是否代表高階著色器語言 (HLSL) 資料。
IDiaSymbol::get_isHotpatchable 擷取旗標,指出模組是否使用 /hotpatch (建立可線上修補的映像) 編譯器參數進行編譯。
IDiaSymbol::get_isLTCG 擷取指出受控編譯模組是否與連結器 LTCG 連結的旗標。
IDiaSymbol::get_isMatrixRowMajor 指定矩陣是否為主要資料列。
IDiaSymbol::get_isMSILNetmodule 擷取指出受控編譯模組 是否為 .netmodule (只包含中繼資料) 的旗標。
IDiaSymbol::get_isMultipleInheritance 指定 this 指標是否指向具有多重繼承的資料成員。
IDiaSymbol::get_isNaked 擷取指出函式是否具有 naked 屬性的旗標。
IDiaSymbol::get_isOptimizedAway 指定變數是否已最佳化。
IDiaSymbol::get_isPointerBasedOnSymbolValue 指定 this 指標是否以符號值為基礎。
IDiaSymbol::get_isPointerToDataMember 指定這個符號是否為資料成員的指標。
IDiaSymbol::get_isPointerToMemberFunction 指定這個符號是否為成員函式的指標。
IDiaSymbol::get_isReturnValue 指定變數是否帶有傳回值。
IDiaSymbol::get_isSdl 指定是否使用 /SDL 選項編譯模組。
IDiaSymbol::get_isSingleInheritance 指定 this 指標是否指向具有單一繼承的資料成員。
IDiaSymbol::get_isSplitted 擷取指出資料是否已分割成個別符號彙總的旗標。
IDiaSymbol::get_isStatic 擷取指出函式或 Thunk 層是否為靜態的旗標。
IDiaSymbol::get_isStripped 擷取指出是否已從符號檔案中移除私人符號的旗標。
IDiaSymbol::get_isVirtualInheritance 指定 this 指標是否指向具有虛擬繼承的資料成員。
IDiaSymbol::get_language 擷取來源的語言。
IDiaSymbol::get_length 擷取這個符號所代表物件使用的記憶體位元組數目。
IDiaSymbol::get_lexicalParent 擷取符號之語彙父代的參考。
IDiaSymbol::get_lexicalParentId 擷取符號的語彙父識別碼。
IDiaSymbol::get_libraryName 擷取載入物件之程式庫或物件檔案的檔案名稱。
IDiaSymbol::get_liveRangeLength 傳回本機符號有效的位址範圍長度。
IDiaSymbol::get_liveRangeStartAddressSection 傳回本機符號有效之起始位址範圍的區段部分。
IDiaSymbol::get_liveRangeStartAddressOffset 傳回本機符號有效之起始位址範圍的位移部分。
IDiaSymbol::get_liveRangeStartRelativeVirtualAddress 傳回本機符號有效的位址範圍開頭。
IDiaSymbol::get_locationType 擷取資料符號的位置類型。
IDiaSymbol::get_lowerBound 擷取 FORTRAN 陣列維度下限。
IDiaSymbol::get_lowerBoundId 擷取 FORTRAN 陣列維度下限的符號識別碼。
IDiaSymbol::get_machineType 擷取目標 CPU 的類型。
IDiaSymbol::get_managed 擷取指出符號是否參考受控程式碼的旗標。
IDiaSymbol::get_memorySpaceKind 擷取記憶體空間種類。
IDiaSymbol::get_msil 擷取指出符號是否參考 Microsoft 中繼語言 (MSIL) 程式碼的旗標。
IDiaSymbol::get_name 擷取符號的名稱。
IDiaSymbol::get_nested 擷取指出使用者定義資料類型是否為巢狀的旗標。
IDiaSymbol::get_noInline 擷取指出函式是否以 noinline 屬性標記的旗標。
IDiaSymbol::get_noReturn 擷取指出是否已使用 noreturn 屬性宣告函式的旗標。
IDiaSymbol::get_noStackOrdering 擷取指出是否可以在堆疊緩衝區檢查中執行堆疊順序的旗標。
IDiaSymbol::get_notReached 擷取指出從未達到函式或標籤的旗標。
IDiaSymbol::get_numberOfAcceleratorPointerTags 傳回 C++ AMP 虛設常式函式中的快速鍵指標標記數目。
IDiaSymbol::get_numberOfModifiers 擷取套用至原始類型的修飾元數目。
IDiaSymbol::get_numberOfRegisterIndices 擷取暫存器索引的數目。
IDiaSymbol::get_numberOfRows 擷取矩陣中的資料列數目。
IDiaSymbol::get_numberOfColumns 擷取矩陣中的資料行數目。
IDiaSymbol::get_objectFileName 擷取物件檔案名稱。
IDiaSymbol::get_objectPointerType 擷取類別方法的物件指標類型。
IDiaSymbol::get_oemId 擷取符號的 oemId 值。
IDiaSymbol::get_oemSymbolId 擷取符號的 oemSymbolId 值。
IDiaSymbol::get_offset 擷取符號位置的位移。
IDiaSymbol::get_optimizedCodeDebugInfo 擷取指出函式或標籤是否包含最佳化的程式碼以及偵錯資訊的旗標。
IDiaSymbol::get_overloadedOperator 擷取指出使用者定義資料類型是否具有多載運算子的旗標。
IDiaSymbol::get_packed 擷取指出使用者定義資料類型是否已封裝的旗標。
IDiaSymbol::get_platform 擷取程式或編譯模組編譯的平台類型。
IDiaSymbol::get_pure 擷取指出函式是否為純虛擬的旗標。
IDiaSymbol::get_rank 擷取 FORTRAN 多維陣列的排名。
IDiaSymbol::get_reference 擷取指出指標類型是否為參考的旗標。
IDiaSymbol::get_registerId 擷取位置的暫存器指示項。
IDiaSymbol::get_registerType 擷取暫存器類型。
IDiaSymbol::get_relativeVirtualAddress 擷取位置的相對虛擬位址 (RVA)。
IDiaSymbol::get_restrictedType 指定 this 指標是否標示為受限制。
IDiaSymbol::get_samplerSlot 擷取取樣器位置。
IDiaSymbol::get_scoped 擷取指出使用者定義資料類型是否出現在非全域語彙範圍中的旗標。
IDiaSymbol::get_signature 擷取符號的簽章值。
IDiaSymbol::get_sizeInUdt 擷取使用者定義型別的成員大小。
IDiaSymbol::get_slot 擷取位置的位置編號。
IDiaSymbol::get_sourceFileName 擷取來源檔案的檔案名稱。
IDiaSymbol::getSrcLineOnTypeDefn 擷取來源檔案和行號,這兩者會指出指定使用者定義型別的定義位置。
IDiaSymbol::get_stride 擷取矩陣步距或步距陣列。
IDiaSymbol::get_subType 擷取子類型。
IDiaSymbol::get_subTypeId 擷取子類型識別碼。
IDiaSymbol::get_symbolsFileName 擷取載入符號的來源檔案名稱。
IDiaSymbol::get_symIndexId 擷取唯一符號識別碼。
IDiaSymbol::get_symTag 擷取符號類型分類器。
IDiaSymbol::get_targetOffset 擷取 Thunk 目標的位移區段。
IDiaSymbol::get_targetRelativeVirtualAddress 擷取 Thunk 目標的相對虛擬位址 (RVA)。
IDiaSymbol::get_targetSection 擷取 Thunk 目標的位址區段。
IDiaSymbol::get_targetVirtualAddress 擷取 Thunk 目標的虛擬位址 (VA)。
IDiaSymbol::get_textureSlot 擷取紋理位置。
IDiaSymbol::get_thisAdjust 擷取方法的邏輯 this 調整器。
IDiaSymbol::get_thunkOrdinal 擷取函式的 Thunk 類型。
IDiaSymbol::get_timeStamp 擷取基礎可執行檔的時間戳記。
IDiaSymbol::get_token 擷取受控函式或變數的中繼資料權杖。
IDiaSymbol::get_type 擷取函式簽章的參考。
IDiaSymbol::get_typeId 擷取符號的類型識別碼。
IDiaSymbol::get_types 擷取此符號的編譯器特定型別值陣列。
IDiaSymbol::get_typeIds 擷取此符號的編譯器特定型別識別碼值陣列。
IDiaSymbol::get_uavSlot 擷取 uav 位置。
IDiaSymbol::get_udtKind 擷取使用者定義型別 (UDT) 的各種類型。
IDiaSymbol::get_unalignedType 擷取指出使用者定義資料類型是否未對齊的旗標。
IDiaSymbol::get_undecoratedName 擷取 C++ 裝飾或連結與名稱的未裝飾名稱。
IDiaSymbol::get_undecoratedNameEx get_undecoratedName 方法的延伸,這個方法會根據延伸欄位的值擷取未裝飾名稱。
IDiaSymbol::get_unmodifiedTypeId 擷取原始 (未修改) 類型的識別碼。
IDiaSymbol::get_upperBound 擷取 FORTRAN 陣列維度下限。
IDiaSymbol::get_upperBoundId 擷取 FORTRAN 陣列維度上限的符號識別碼。
IDiaSymbol::get_value 擷取常數的值。
IDiaSymbol::get_virtual 擷取指出函式是否為虛擬的旗標。
IDiaSymbol::get_virtualAddress 擷取位置的虛擬位址 (VA)。
IDiaSymbol::get_virtualBaseClass 擷取指出使用者定義資料類型是否為虛擬基底類別的旗標。
IDiaSymbol::get_virtualBaseDispIndex 擷取虛擬基底位移資料表的索引。
IDiaSymbol::get_virtualBaseOffset 擷取虛擬函式虛擬函式資料表中的位移。
IDiaSymbol::get_virtualBasePointerOffset 擷取虛擬基底指標的位移。
IDiaSymbol::get_virtualBaseTableType 擷取虛擬基底資料表指標的類型。
IDiaSymbol::get_virtualTableShape 擷取使用者定義型別之虛擬資料表類型的符號介面。
IDiaSymbol::get_virtualTableShapeId 擷取符號的虛擬資料表圖形識別碼。
IDiaSymbol::get_volatileType 擷取指出使用者定義資料類型是否為 volatile 的旗標。

備註

呼叫端注意事項

呼叫下列其中一種方法來取得此介面:

範例

這個範例示範如何在指定的相對虛擬位址顯示函式的區域變數。 它也會示範不同類型符號彼此的關聯方式。

注意

CDiaBSTR 是一個類別,它封裝了一個 BSTR 並且在具現化超出範圍時自動釋放字串的記憶體。

void DumpLocalVars( DWORD rva, IDiaSession *pSession )
{
    CComPtr< IDiaSymbol > pBlock;
    if ( FAILED( psession->findSymbolByRVA( rva, SymTagBlock, &pBlock ) ) )
    {
        Fatal( "Failed to find symbols by RVA" );
    }
    CComPtr< IDiaSymbol > pscope;
    for ( ; pBlock != NULL; )
    {
        CComPtr< IDiaEnumSymbols > pEnum;
        // local data search
        if ( FAILED( pBlock->findChildren( SymTagNull, NULL, nsNone, &pEnum ) ) )
        {
            Fatal( "Local scope findChildren failed" );
        }
        CComPtr< IDiaSymbol > pSymbol;
        DWORD tag;
        DWORD celt;
        while ( pEnum != NULL &&
                SUCCEEDED( pEnum->Next( 1, &pSymbol, &celt ) ) &&
                celt == 1)
        {
            pSymbol->get_symTag( &tag );
            if ( tag == SymTagData )
            {
                CDiaBSTR name;
                DWORD    kind;
                pSymbol->get_name( &name );
                pSymbol->get_dataKind( &kind );
                if ( name != NULL )
                    wprintf_s( L"\t%s (%s)\n", name, szDataKinds[ kind ] );
            }
            else if ( tag == SymTagAnnotation )
            {
                CComPtr< IDiaEnumSymbols > pValues;
                // local data search
                wprintf_s( L"\tAnnotation:\n" );
                if ( FAILED( pSymbol->findChildren( SymTagNull, NULL, nsNone, &pValues ) ) )
                    Fatal( "Annotation findChildren failed" );
                pSymbol = NULL;
                while ( pValues != NULL &&
                        SUCCEEDED( pValues->Next( 1, &pSymbol, &celt ) ) &&
                        celt == 1 )
                {
                    CComVariant value;
                    if ( pSymbol->get_value( &value ) != S_OK )
                        Fatal( "No value for annotation data." );
                    wprintf_s( L"\t\t%ws\n", value.bstrVal );
                    pSymbol = NULL;
                }
            }
            pSymbol = NULL;
        }
        pBlock->get_symTag( &tag );
        if ( tag == SymTagFunction )    // stop when at function scope
            break;
        // move to lexical parent
        CComPtr< IDiaSymbol > pParent;
        if ( SUCCEEDED( pBlock->get_lexicalParent( &pParent ) )
            && pParent != NULL ) {
            pBlock = pParent;
        }
        else
        {
            Fatal( "Finding lexical parent failed." );
        }
    };
}

需求

Header: Dia2.h

程式庫:diaguids.lib

DLL: msdia80.dll

另請參閱