常规调试选项(VS2017):“使用托管的兼容模式”和带有枚举的结构

时间:2019-04-20 00:14:30

标签: debugging visual-studio-2017 options

我正在尝试使用某些结构调试代码

struct VirtualArrayTest
{
    private T[] Array;
    private TypeCurrentArray CurrentArray;
    private int StartPos;
    private int FinPos;

    public enum TypeCurrentArray
   {
    Main = 1,
    Temp
   }
    ....
}

我看不到这些变量的当前值(类型VirtualArrayTest)。我收到消息“运行时无法评估此表达式” 。如果在我的结构中,则具有变量 CurrentArray(枚举)

我只能通过设置选项“使用托管的兼容模式”来确定此问题。 我确定这个问题对吗?

对于该选项,我不知道它与official documentation有何关系?什么是“默认调试引擎”和“旧版”?为什么“默认调试引擎”不支持检查这些类型的变量?

1 个答案:

答案 0 :(得分:0)

其他信息 问题“无法看到VirtualArrayTest类型变量的当前值”与struct CurrentArray(枚举)字段中的结构有关。 也可以通过替换当前创建和初始化结构的变体来确定(也可以通过其他方式(未设置选项“使用托管的兼容模式”))来确定:

        VirtualArray ArrayInitial; 
        ArrayInitial.CurrentArray = TypeCurrentArray.Main;
        ArrayInitial.Array = arrInitial;
        ArrayInitial.IndxStart = 0;
        ArrayInitial.IndxLast = iNumElements - 1;

上一个:

 `VirtualArray ArrayInitial = new VirtualArray(arrInitial, TypeCurrentArray.Main);` 

或通过显式获取字段 ArrayInitial.CurrentArray 的值(在通过第一种方法创建结构之后),例如,它也将起作用:

var t =  ArrayInitial.CurrentArray;

在第一次显式获取此字段的值之后,VS2017调试器将正确显示该类型的所有变量的值(也没有设置选项“使用托管的兼容模式”)。 我不知道,这是错误或功能。