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 检索程序数据库的 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++ 样式异常处理程序。
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 加速器编译的代码中,该符号是否与指针变量的标记组件的定义范围符号相对应。 定义范围符号是某个地址范围的变量位置。
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 检索子类型 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 检索符号的虚拟表形状标识符。
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

另请参阅