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. C++ AMP存根函数的指针标记的数目。

IDiaSymbol::get_acceleratorPointerTags

返回对应于c. 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

检索指针基于的符号ID。

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

检索指示函数是否的标志将返回。

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. 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. C++ AMP快捷键编译代码的一组共享局部变量。

IDiaSymbol::get_isAcceleratorPointerTagLiveRange

检索指示的标志符号是否符合指针变量的标记元素的 定义范围符号 在为c. C++ AMP快捷键生成的代码。定义范围符号是变量的位置地址范围的。

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

检索指示托管编译是否的标志是a。.netmodule (仅包含元数据)。

IDiaSymbol::get_isMultipleInheritance

指定 this 指针是否指向具有多重继承的数据成员。

IDiaSymbol::get_isNaked

检索指示函数是否的标志具有 naked (C++) 属性。

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. 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

检索子类型ID.

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

检索原始(非限定)类型的ID。

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

检索符号的虚拟表格形状标识符(VA)。

IDiaSymbol::get_volatileType

检索一个标志,该标志表明用户定义数据类型是否是可变的。

备注

对调用方法的说明

通过调用下列方法之一来获取此接口:

示例

此示例显示了如何在某一给定的相对虚拟地址函数显示函数的局部变量。它还显示不同类型的符号如何相互关联。

说明说明

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

请参见

参考

IDiaEnumSymbolsByAddr

IDiaEnumSymbols

IDiaSession

符号类型的类层次结构

编译单位

其他资源

接口(调试接口访问 SDK)

符号和符号标记