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

问题描述 投票:0回答:1

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

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

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

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

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

我不明白它与official documentation有关这个选项的关系如何? “默认调试引擎”和“旧版本”是什么意思?为什么“默认调试引擎”不支持检查这些类型的变量?

debugging visual-studio-2017 options
1个回答
0
投票

附加信息问题“不可能看到VirtualArrayTest类型变量的当前值”与结构中存在的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的值(在第一次创建struct之后),例如它也可以工作:

var t =  ArrayInitial.CurrentArray;

在第一次显式获取该字段的值后,VS2017 Debuger将正确显示该类型的所有变量的值(也没有设置选项“使用管理兼容模式”)。我不知道,它是一个Bug或功能。

© www.soinside.com 2019 - 2024. All rights reserved.