IDiaSymbol

Describes the properties of a symbol instance.

Syntax

IDiaSymbol : IUnknown

Methods in Alphabetical Order

The following table shows the methods of IDiaSymbol.

Note

Symbols will return meaningful data for only some of these methods, depending on the type of symbol. If a method returns S_OK, then that method has returned meaningful data.

Method Description
IDiaSymbol::findChildren Retrieves all children of the symbol.
IDiaSymbol::findChildrenEx Retrieves the children of the symbol. This method is the extended version of IDiaSymbol::findChildren.
IDiaSymbol::findChildrenExByAddr Retrieves the children of the symbol that are valid at a specified address.
IDiaSymbol::findChildrenExByRVA Retrieves the children of the symbol that are valid at a specified relative virtual address (RVA).
IDiaSymbol::findChildrenExByVA Retrieves the children of the symbol that are valid at a specified virtual address.
IDiaSymbol::findInlineeLines Retrieves an enumeration that allows a client to iterate through the line number information of all functions that are inlined, directly or indirectly, in this symbol.
IDiaSymbol::findInlineeLinesByAddr Retrieves an enumeration that allows a client to iterate through the line number information of all functions that are inlined, directly or indirectly, in this symbol within the specified address range.
IDiaSymbol::findInlineeLinesByRVA Retrieves an enumeration that allows a client to iterate through the line number information of all functions that are inlined, directly or indirectly, in this symbol within the specified relative virtual address (RVA).
IDiaSymbol::findInlineeLinesByVA Retrieves an enumeration that allows a client to iterate through the line number information of all functions that are inlined, directly or indirectly, in this symbol within the specified virtual address (VA).
IDiaSymbol::findInlineFramesByAddr Retrieves an enumeration that allows a client to iterate through all of the inline frames on a given address.
IDiaSymbol::findInlineFramesByRVA Retrieves an enumeration that allows a client to iterate through all of the inline frames on a specified relative virtual address (RVA).
IDiaSymbol::findInlineFramesByVA Retrieves an enumeration that allows a client to iterate through all of the inline frames on a specified virtual address (VA).
IDiaSymbol::findInputAssemblyFile Retrieves the .NET Native input assembly file that is the parent of the symbol.
IDiaSymbol::findSymbolsByRVAForAcceleratorPointerTag Given a corresponding tag value, this method returns an enumeration of symbols that are contained in this stub function at a specified relative virtual address.
IDiaSymbol::findSymbolsForAcceleratorPointerTag Returns the number of accelerator pointer tags in a C++ AMP stub function.
IDiaSymbol::get_acceleratorPointerTags Returns all accelerator pointer tag values that correspond to a C++ AMP accelerator stub function.
IDiaSymbol::get_access Retrieves the access modifier of a class member.
IDiaSymbol::get_addressOffset Retrieves the offset part of an address location.
IDiaSymbol::get_addressSection Retrieves the section part of an address location.
IDiaSymbol::get_addressTaken Retrieves a flag indicating whether another symbol references this address.
IDiaSymbol::get_age Retrieves the age value of a program database.
IDiaSymbol::get_arrayIndexType Retrieves the symbol identifier of the array index type.
IDiaSymbol::get_arrayIndexTypeId Retrieves the array index type identifier of the symbol.
IDiaSymbol::get_backEndBuild Retrieves the back-end build number.
IDiaSymbol::get_backEndMajor Retrieves the back-end major version number.
IDiaSymbol::get_backEndMinor Retrieves the back-end minor version number.
IDiaSymbol::get_backEndQFE Retrieves the back-end qfe number.
IDiaSymbol::get_baseDataOffset Retrieves the base data offset.
IDiaSymbol::get_baseDataSlot Retrieves the base data slot.
IDiaSymbol::get_baseSymbol Retrieves the symbol from which the pointer is based.
IDiaSymbol::get_baseSymbolId Retrieves the symbol ID from which the pointer is based.
IDiaSymbol::get_baseType Retrieves the type tag of a simple type.
IDiaSymbol::get_bindID Retrieves the binding register index.
IDiaSymbol::get_bindSlot Retrieves the lower bound in binding space.
IDiaSymbol::get_bindSpace Retrieves the binding space.
IDiaSymbol::get_bitPosition Retrieves the bit position of a location.
IDiaSymbol::get_builtInKind Retrieves a built-in kind of the HLSL type.
IDiaSymbol::get_callingConvention Returns an indicator of a method's calling convention.
IDiaSymbol::get_characteristics Retrieves the characteristics of this COFF section.
IDiaSymbol::get_classParent Retrieves a reference to the class parent of the symbol.
IDiaSymbol::get_classParentId Retrieves the class parent identifier of the symbol.
IDiaSymbol::get_code Retrieves a flag indicating whether the symbol refers to a code address.
IDiaSymbol::get_coffGroup Retrieves the COFF group symbol this symbol comes from.
IDiaSymbol::get_compilerGenerated Retrieves a flag indicating whether the symbol was compiler-generated.
IDiaSymbol::get_compilerName Retrieves the name of the compiler used to create the Compiland.
IDiaSymbol::get_constantExport Retrieves a flag indicating whether this export is CONSTANT.
IDiaSymbol::get_constructor Retrieves a flag indicating whether the user-defined data type has a constructor.
IDiaSymbol::get_constType Retrieves a flag indicating whether the user-defined data type is constant.
IDiaSymbol::get_container Retrieves the containing symbol of this symbol.
IDiaSymbol::get_count Retrieves the number of items in a list or array.
IDiaSymbol::get_countLiveRanges Retrieves the number of valid address ranges associated with the local symbol.
IDiaSymbol::get_customCallingConvention Retrieves a flag indicating whether the function uses a custom calling convention.
IDiaSymbol::get_dataBytes Retrieves the data bytes of an OEM symbol.
IDiaSymbol::get_dataExport Retrieves a flag indicating whether this export is DATA.
IDiaSymbol::get_dataKind Retrieves the variable classification of a data symbol.
IDiaSymbol::get_editAndContinueEnabled Retrieves the flag describing the Edit and Continue features of the compiled program or unit.
IDiaSymbol::get_exceptionHandlerAddressOffset Retrieves the section offset of the exception handler.
IDiaSymbol::get_exceptionHandlerAddressSection Retrieves the section number of the exception handler.
IDiaSymbol::get_exceptionHandlerRelativeVirtualAddress Retrieves the relative virtual address of the exception handler.
IDiaSymbol::get_exceptionHandlerVirtualAddress Retrieves the virtual address of the exception handler.
IDiaSymbol::get_exportHasExplicitlyAssignedOrdinal Retrieves a flag indicating whether this export has an explicitly assigned ordinal.
IDiaSymbol::get_exportIsForwarder Retrieves a flag indicating whether this export is a forwarder.
IDiaSymbol::get_farReturn Retrieves a flag indicating whether the function uses a far return.
IDiaSymbol::get_finalLiveStaticSize Retrieves the final static size of live function, after inlining.
IDiaSymbol::get_framePointerPresent Retrieves a flag indicating whether this function has a frame pointer.
IDiaSymbol::get_frameSize Retrieves the frame size.
IDiaSymbol::get_frontEndBuild Retrieves the front-end build number.
IDiaSymbol::get_frontEndMajor Retrieves the front-end major version number.
IDiaSymbol::get_frontEndMinor Retrieves the front-end minor version number.
IDiaSymbol::get_frontEndQFE Retrieves the front-end QFE version number.
IDiaSymbol::get_function Retrieves a flag indicating whether the public symbol refers to a function.
IDiaSymbol::get_guid Retrieves the symbol's GUID.
IDiaSymbol::get_hasAlloca Retrieves a flag indicating whether the function contains a call to alloca.
IDiaSymbol::get_hasAssignmentOperator Retrieves a flag indicating whether the user-defined data type has any assignment operators defined.
IDiaSymbol::get_hasCastOperator Retrieves a flag indicating whether the user-defined data type has any cast operators defined.
IDiaSymbol::get_hasControlFlowCheck Retrieves a flag indicating whether this function contains control flow checks.
IDiaSymbol::get_hasDebugInfo Retrieves a flag indicating whether the compiland contains any debugging information.
IDiaSymbol::get_hasEH Retrieves a flag indicating whether the function has a C++-style exception handler.
IDiaSymbol::get_hasEHa Retrieves a flag indicating whether the function has an asynchronous exception handler.
IDiaSymbol::get_hasInlAsm Retrieves a flag indicating whether the function has inline assembly.
IDiaSymbol::get_hasLongJump Retrieves a flag indicating whether the function contains a longjmp command (part of C-style exception handling).
IDiaSymbol::get_hasManagedCode Retrieves a flag indicating whether the module contains managed code.
IDiaSymbol::get_hasNestedTypes Retrieves a flag indicating whether the user-defined data type has nested type definitions.
IDiaSymbol::get_hasSecurityChecks Retrieves a flag indicating whether the function or compiland has security checks compiled in (via the /GS (Buffer Security Check) compiler switch).
IDiaSymbol::get_hasSEH Retrieves a flag indicating whether the function has Win32-style Structured Exception Handling.
IDiaSymbol::get_hasSetJump Retrieves a flag indicating whether the function contains a setjmp command.
IDiaSymbol::get_hasValidPGOCounts Retrieves a flag indicating whether this symbols has valid PGO counts.
IDiaSymbol::get_hfaDouble Retrieves a flag that specifies whether a user-defined type (UDT) contains homogeneous floating-point aggregate (HFA) data of type double.
IDiaSymbol::get_hfaFloat Retrieves a flag that specifies whether a user-defined type (UDT) contains homogeneous floating-point aggregate (HFA) data of type float.
IDiaSymbol::get_indirectVirtualBaseClass Retrieves a flag indicating whether the user-defined data type is an indirect virtual base class.
IDiaSymbol::get_InlSpec Retrieves a flag indicating whether the function has been marked with the inline attribute.
IDiaSymbol::get_interruptReturn Retrieves a flag indicating whether the function has a return from interrupt instruction.
IDiaSymbol::get_intrinsic Retrieves a flag that specifies whether a class is an intrinsic type.
IDiaSymbol::get_intro Retrieves a flag indicating whether the function is the base class virtual function.
IDiaSymbol::get_isAcceleratorGroupSharedLocal Retrieves a flag that indicates whether the symbol corresponds to a group shared local variable in code compiled for a C++ AMP Accelerator.
IDiaSymbol::get_isAcceleratorPointerTagLiveRange Retrieves a flag that indicates whether the symbol corresponds to the definition range symbol for the tag component of a pointer variable in code compiled for a C++ AMP Accelerator. The definition range symbol is the location of a variable for a span of addresses.
IDiaSymbol::get_isAcceleratorStubFunction Indicates whether the symbol corresponds to a top-level function symbol for a shader compiled for an accelerator that corresponds to a parallel_for_each call.
IDiaSymbol::get_isAggregated Retrieves a flag indicating whether the data is part of an aggregate of many symbols.
IDiaSymbol::get_isConstructorVirtualBase Retrieves a flag indicating whether this is an instance constructor of a class with virtual base.
IDiaSymbol::get_isCTypes Retrieves a flag indicating whether the symbol file contains C types.
IDiaSymbol::get_isCVTCIL Retrieves a flag indicating whether the module was converted from Common Intermediate Language (CIL) to native code.
IDiaSymbol::get_isCxxReturnUdt Retrieves a flag indicating whether return C++ style UDT.
IDiaSymbol::get_isDataAligned Retrieves a flag indicating whether the elements of a user-defined data type are aligned to a specific boundary.
IDiaSymbol::get_isHLSLData Specifies whether this symbol represents High Level Shader Language (HLSL) data.
IDiaSymbol::get_isHotpatchable Retrieves a flag indicating whether the module was compiled with the /hotpatch (Create Hotpatchable Image) compiler switch.
IDiaSymbol::get_isInterfaceUdt Retrieves a flag indicating whether the type is a WinRT interface user-defined type (UDT).
IDiaSymbol::get_isLocationControlFlowDependent Retrieves a flag indicating whether a local symbol's location liveness is dependent upon the control flow of the function.
IDiaSymbol::get_isLTCG Retrieves a flag indicating whether the managed compiland was linked with the linker's LTCG.
IDiaSymbol::get_isMatrixRowMajor Specifies whether the matrix is row major.
IDiaSymbol::get_isMSILNetmodule Retrieves a flag indicating whether the managed compiland is a .netmodule (containing only metadata).
IDiaSymbol::get_isMultipleInheritance Specifies whether the this pointer points to a data member with multiple inheritance.
IDiaSymbol::get_isNaked Retrieves a flag indicating whether the function has the naked attribute.
IDiaSymbol::get_isOptimizedAway Specifies whether the variable is optimized away.
IDiaSymbol::get_isOptimizedForSpeed Retrieves a flag indicating whether the function is optimized for speed.
IDiaSymbol::get_isPGO Retrieves a flag indicating whether PGO was enabled.
IDiaSymbol::get_isPointerBasedOnSymbolValue Specifies whether the this pointer is based on a symbol value.
IDiaSymbol::get_isPointerToDataMember Specifies whether this symbol is a pointer to a data member.
IDiaSymbol::get_isPointerToMemberFunction Specifies whether this symbol is a pointer to a member function.
IDiaSymbol::get_isRefUdt Retrieves a flag indicating whether this is a WinRT reference user-defined type (UDT).
IDiaSymbol::get_isReturnValue Specifies whether the variable carries a return value.
IDiaSymbol::get_isSafeBuffers Retrieves a flag that specifies whether the preprocesser directive for a safe buffer is used.
IDiaSymbol::get_isSdl Specifies whether the module is compiled with the /SDL option.
IDiaSymbol::get_isSingleInheritance Specifies whether the this pointer points to a data member with single inheritance.
IDiaSymbol::get_isSplitted Retrieves a flag indicating whether the data has been split into an aggregate of separate symbols.
IDiaSymbol::get_isStatic Retrieves a flag indicating whether a function or thunk layer is static.
IDiaSymbol::get_isStripped Retrieves a flag indicating whether private symbols have been stripped from the symbol file.
IDiaSymbol::get_isValueUdt Retrieves a flag indicating whether this is a WinRT value user-defined type (UDT).
IDiaSymbol::get_isVirtualInheritance Specifies whether the this pointer points to a data member with virtual inheritance.
IDiaSymbol::get_isWinRTPointer Retrieves a flag indicating whether this is a WinRT pointer type.
IDiaSymbol::get_language Retrieves the language of the source.
IDiaSymbol::get_length Retrieves the number of bytes of memory used by the object represented by this symbol.
IDiaSymbol::get_lexicalParent Retrieves a reference to the lexical parent of the symbol.
IDiaSymbol::get_lexicalParentId Retrieves the lexical parent identifier of the symbol.
IDiaSymbol::get_libraryName Retrieves the file name of the library or object file from which the object was loaded.
IDiaSymbol::get_liveRangeLength Returns the length of the address range in which the local symbol is valid.
IDiaSymbol::get_liveRangeStartAddressOffset Returns the offset part of the starting address range in which the local symbol is valid.
IDiaSymbol::get_liveRangeStartAddressSection Returns the section part of the starting address range in which the local symbol is valid.
IDiaSymbol::get_liveRangeStartRelativeVirtualAddress Returns the start of the address range in which the local symbol is valid.
IDiaSymbol::get_localBasePointerRegisterId Retrieves the register designator of the register holding base pointer to locals.
IDiaSymbol::get_locationType Retrieves the location type of a data symbol.
IDiaSymbol::get_lowerBound Retrieves the lower bound of a FORTRAN array dimension.
IDiaSymbol::get_lowerBoundId Retrieves the symbol identifier of the lower bound of a FORTRAN array dimension.
IDiaSymbol::get_machineType Retrieves the type of the target CPU.
IDiaSymbol::get_managed Retrieves a flag that indicating whether the symbol refers to managed code.
IDiaSymbol::get_memorySpaceKind Retrieves the memory space kind.
IDiaSymbol::get_modifierValues Retrieves the set of modifers for this symbol.
IDiaSymbol::get_msil Retrieves a flag indicating whether the symbol refers to Microsoft Intermediate Language (MSIL) code.
IDiaSymbol::get_name Retrieves the name of the symbol.
IDiaSymbol::get_nested Retrieves a flag indicating whether the user-defined data type is nested.
IDiaSymbol::get_noInline Retrieves a flag indicating whether the function is marked with the noinline attribute.
IDiaSymbol::get_noNameExport Retrieves a flag indicating whether this export is NONAME.
IDiaSymbol::get_noReturn Retrieves a flag indicating whether the function has been declared with the noreturn attribute.
IDiaSymbol::get_noStackOrdering Retrieves a flag indicating whether no stack ordering could be done as part of stack buffer checking.
IDiaSymbol::get_notReached Retrieves a flag indicating whether the function or label is never reached.
IDiaSymbol::get_numberOfAcceleratorPointerTags Returns the number of accelerator pointer tags in a C++ AMP stub function.
IDiaSymbol::get_numberOfColumns Retrieves the number of columns in the matrix.
IDiaSymbol::get_numberOfModifiers Retrieves the number of modifiers that are applied to the original type.
IDiaSymbol::get_numberOfRegisterIndices Retrieves the number of register indices.
IDiaSymbol::get_numberOfRows Retrieves the number of rows in the matrix.
IDiaSymbol::get_numericProperties Retrieves the set of numeric properties for this symbol.
IDiaSymbol::get_objectFileName Retrieves the object file name.
IDiaSymbol::get_objectPointerType Retrieves the type of the object pointer for a class method.
IDiaSymbol::get_oemId Retrieves the symbol's oemId value.
IDiaSymbol::get_oemSymbolId Retrieves the symbol's oemSymbolId value.
IDiaSymbol::get_offset Retrieves the offset of the symbol location.
IDiaSymbol::get_offsetInUdt Retrieves the field offset of this symbol withinthe outer user-defined type (UDT).
IDiaSymbol::get_optimizedCodeDebugInfo Retrieves a flag indicating whether the function or label contains optimized code as well as debug information.
IDiaSymbol::get_ordinal Retrieves the ordinal of this export.
IDiaSymbol::get_overloadedOperator Retrieves a flag indicating whether the user-defined data type has overloaded operators.
IDiaSymbol::get_packed Retrieves a flag indicating whether the user-defined data type is packed.
IDiaSymbol::get_paramBasePointerRegisterId Retrieves the register designator of the register holding the base pointer to parameters.
IDiaSymbol::get_PGODynamicInstructionCount Retrieves the dynamic instruction count calculated by training.
IDiaSymbol::get_PGOEdgeCount Retrieves the edge count between a caller/callee and it's parent.
IDiaSymbol::get_PGOEntryCount Retrieves the total invocation count in PGO training.
IDiaSymbol::get_phaseName Retrieves the phase this function is a member of for PGO multiphased builds.
IDiaSymbol::get_platform Retrieves the platform type for which the program or compiland was compiled.
IDiaSymbol::get_privateExport Retrieves a flag indicating whether this export is PRIVATE.
IDiaSymbol::get_pure Retrieves a flag that indicating whether the function is pure virtual.
IDiaSymbol::get_rank Retrieves the rank of a FORTRAN multidimensional array.
IDiaSymbol::get_reference Retrieves a flag indicating whether a pointer type is a reference.
IDiaSymbol::get_registerId Retrieves the register designator of the location.
IDiaSymbol::get_registerType Retrieves the register type.
IDiaSymbol::get_relativeVirtualAddress Retrieves the relative virtual address (RVA) of the location.
IDiaSymbol::get_restrictedType Specifies whether the this pointer is flagged as restricted.
IDiaSymbol::get_RValueReference Retrieves a flag that specifies whether a pointer type is an rvalue reference.
IDiaSymbol::get_samplerSlot Retrieves the sampler slot.
IDiaSymbol::get_scoped Retrieves a flag indicating whether the user-defined data type appears in a nonglobal lexical scope.
IDiaSymbol::get_sealed Retrieves a flag that specifies whether the class or method is sealed.
IDiaSymbol::get_signature Retrieves the symbol's signature value.
IDiaSymbol::get_sizeInUdt Retrieves the size of a member of a user-defined type.
IDiaSymbol::get_slot Retrieves the slot number of the location.
IDiaSymbol::get_sourceFileName Retrieves the file name of the source file.
IDiaSymbol::get_staticSize Retrieves the static instruction count.
IDiaSymbol::get_strictGSCheck Retrieves a flag indicating whether this function was compiled with strict_gs_check pragma enabled.
IDiaSymbol::get_stride Retrieves the stride of the matrix or strided array.
IDiaSymbol::get_subType Retrieves the sub type.
IDiaSymbol::get_subTypeId Retrieves the sub type ID.
IDiaSymbol::get_symbolsFileName Retrieves the name of the file from which the symbols were loaded.
IDiaSymbol::get_symIndexId Retrieves the unique symbol identifier.
IDiaSymbol::get_symTag Retrieves the symbol type classifier.
IDiaSymbol::get_targetOffset Retrieves the offset section of a thunk target.
IDiaSymbol::get_targetRelativeVirtualAddress Retrieves the relative virtual address (RVA) of a thunk target.
IDiaSymbol::get_targetSection Retrieves the address section of a thunk target.
IDiaSymbol::get_targetVirtualAddress Retrieves the virtual address (VA) of a thunk target.
IDiaSymbol::get_textureSlot Retrieves the texture slot.
IDiaSymbol::get_thisAdjust Retrieves the logical this adjustor for the method.
IDiaSymbol::get_thunkOrdinal Retrieves the thunk type of a function.
IDiaSymbol::get_timeStamp Retrieves the timestamp of the underlying executable file.
IDiaSymbol::get_token Retrieves the metadata token of a managed function or variable.
IDiaSymbol::get_type Retrieves a reference to the function signature.
IDiaSymbol::get_typeId Retrieves the type identifier of the symbol.
IDiaSymbol::get_typeIds Retrieves an array of compiler-specific type identifier values for this symbol.
IDiaSymbol::get_types Retrieves an array of compiler-specific type values for this symbol.
IDiaSymbol::get_uavSlot Retrieves the uav slot.
IDiaSymbol::get_udtKind Retrieves the variety of a user-defined type (UDT).
IDiaSymbol::get_unalignedType Retrieves a flag indicating whether the user-defined data type is unaligned.
IDiaSymbol::get_undecoratedName Retrieves the undecorated name for a C++ decorated, or linkage, name.
IDiaSymbol::get_undecoratedNameEx Extension of the get_undecoratedName method that retrieves the undecorated name based on the value of an extension field.
IDiaSymbol::get_unmodifiedType Retrieves the original (unmodifed) type of this symbol.
IDiaSymbol::get_unmodifiedTypeId Retrieves the ID of the original (unmodified) type.
IDiaSymbol::get_unused Deprecated function.
IDiaSymbol::get_upperBound Retrieves the upper bound of a FORTRAN array dimension.
IDiaSymbol::get_upperBoundId Retrieves the symbol identifier of the upper bound of a FORTRAN array dimension.
IDiaSymbol::get_value Retrieves the value of a constant.
IDiaSymbol::get_virtual Retrieves a flag indicating whether the function is virtual.
IDiaSymbol::get_virtualAddress Retrieves the virtual address (VA) of the location.
IDiaSymbol::get_virtualBaseClass Retrieves a flag indicating whether the user-defined data type is a virtual base class.
IDiaSymbol::get_virtualBaseDispIndex Retrieves the index to the virtual base displacement table.
IDiaSymbol::get_virtualBaseOffset Retrieves the offset in the virtual function table of a virtual function.
IDiaSymbol::get_virtualBasePointerOffset Retrieves the offset of the virtual base pointer.
IDiaSymbol::get_virtualBaseTableType Retrieves the type of a virtual base table pointer.
IDiaSymbol::get_virtualTableShape Retrieves the symbol interface of the type of the virtual table for a user-defined type.
IDiaSymbol::get_virtualTableShapeId Retrieves the virtual table shape identifier of the symbol.
IDiaSymbol::get_volatileType Retrieves a flag indicating whether the user-defined data type is volatile.
IDiaSymbol::get_wasInlined Retrieves a flag indicating whether this function symbol was inlined into another function.
IDiaSymbol::getSrcLineOnTypeDefn Retrieves the source file and line number that indicate where a specified user-defined type is defined.

Remarks

Notes for Callers

Obtain this interface by calling one of the following methods:

Example

This example shows how to display the local variables for a function at a given relative virtual address. It also shows how symbols of different types are related to each other.

Note

CDiaBSTR is a class that wraps a BSTR and automatically handles freeing the string when the instantiation goes out of scope.

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." );
        }
    };
}

Requirements

Header: Dia2.h

Library: diaguids.lib

DLL: msdia140.dll

See also