File: Data\ExceptionInfo.cs
Web Access
Project: src\src\runtime\src\native\managed\cdac\Microsoft.Diagnostics.DataContractReader.Contracts\Microsoft.Diagnostics.DataContractReader.Contracts.csproj (Microsoft.Diagnostics.DataContractReader.Contracts)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

namespace Microsoft.Diagnostics.DataContractReader.Data;

internal sealed class ExceptionInfo : IData<ExceptionInfo>
{
    static ExceptionInfo IData<ExceptionInfo>.Create(Target target, TargetPointer address)
        => new ExceptionInfo(target, address);

    public ExceptionInfo(Target target, TargetPointer address)
    {
        Target.TypeInfo type = target.GetTypeInfo(DataType.ExceptionInfo);

        PreviousNestedInfo = target.ReadPointerField(address, type, nameof(PreviousNestedInfo));
        ThrownObject = target.ReadPointerField(address, type, nameof(ThrownObject));
        if (type.Fields.ContainsKey(nameof(ExceptionWatsonBucketTrackerBuckets)))
            ExceptionWatsonBucketTrackerBuckets = target.ReadPointerField(address, type, nameof(ExceptionWatsonBucketTrackerBuckets));
        ExceptionFlags = target.ReadField<uint>(address, type, nameof(ExceptionFlags));
        StackLowBound = target.ReadPointerField(address, type, nameof(StackLowBound));
        StackHighBound = target.ReadPointerField(address, type, nameof(StackHighBound));
        PassNumber = target.ReadField<byte>(address, type, nameof(PassNumber));
        CSFEHClause = target.ReadPointerField(address, type, nameof(CSFEHClause));
        CSFEnclosingClause = target.ReadPointerField(address, type, nameof(CSFEnclosingClause));
        CallerOfActualHandlerFrame = target.ReadPointerField(address, type, nameof(CallerOfActualHandlerFrame));
        ClauseForCatchHandlerStartPC = target.ReadField<uint>(address, type, nameof(ClauseForCatchHandlerStartPC));
        ClauseForCatchHandlerEndPC = target.ReadField<uint>(address, type, nameof(ClauseForCatchHandlerEndPC));
    }

    public TargetPointer PreviousNestedInfo { get; }
    public TargetPointer ThrownObject { get; }
    public uint ExceptionFlags { get; }
    public TargetPointer StackLowBound { get; }
    public TargetPointer StackHighBound { get; }
    public TargetPointer ExceptionWatsonBucketTrackerBuckets { get; }
    public byte PassNumber { get; }
    public TargetPointer CSFEHClause { get; }
    public TargetPointer CSFEnclosingClause { get; }
    public TargetPointer CallerOfActualHandlerFrame { get; }
    public uint ClauseForCatchHandlerStartPC { get; }
    public uint ClauseForCatchHandlerEndPC { get; }
}