Visual Studio 2017-在调试模式下无法查看变量

时间:2019-02-28 14:53:03

标签: c# debugging visual-studio-2017 ide

我已经尝试解决这个问题了一段时间了。

我在Visual Studio 2017中工作,并且有许多解决方案。除调试变量外,每个调试变量中的每一个都向我显示变量及其值。它运行完美。

我做了什么:

  • 在托管兼容模式下玩耍
  • 清洁和重建以及所有这些基础知识
  • 删除本地解决方案,并从Git重新获得它
    • 使用相同解决方案的其他开发人员没有此问题
  • 尝试调试VS2015和VS2019 Preview中的解决方案

不能解决这个问题,关于我可以尝试的更多方法的任何想法?

编辑:澄清,调试时可以逐步执行代码,但是无法查看变量的值。

编辑编辑:正在做一些测试,我有新信息。虽然是一个断点,但我看了几个变量。

  • 公共ActionResult详细信息(向导?id)>我可以查看id的值
  • SomeObject item = someobjectRepository.GetItem(id).SingleOrDefault()>获取项目但无法查看其变量
  • 稍后代码中的foreach(item.Subitems中的var subitem)>我可以查看subitem的值。

编辑编辑编辑

所有无法查看的变量已过时。

为了测试姿势,我删除了模型的所有变量,因此完全为空,然后将其初始化

public MySuperModel()
{
}

初始化

MySuperModel model = new MySuperModel();

通过将模型悬停或添加到watch / quickwatch来查看模型,会产生一条消息,表明它已过时。

等等,这很奇怪

2 个答案:

答案 0 :(得分:0)

screenshot - not showing screenshot - not showing

screenshot - showing screenshot - showing

List<ClassA> list = new List<ClassA>();
ClassA retVal = list.Where(o => o.MyProperty1 == 1).FirstOrDefault();

这里也不例外(错误), retVal ,并且您将看不到该类的属性或属性值。

您要做的就是将一些项目添加到列表中。

List<ClassA> list = new List<ClassA>();
list.Add(new ClassA() { MyProperty1 = 1, MyProperty2 = 2 }); //adding item
ClassA retVal = list.Where(o => o.MyProperty1 == 1).SingleOrDefault();

答案 1 :(得分:0)

我已经找到解决问题的方法,我不知道它为什么起作用。

我会尝试解释。

我有一个包含IEnumerables的模型。

模型

public SuperModel()
{
      public IEnumerable<MemberObject> memberList1{get; set;}
      public IEnumerable<MemberObject> memberList2{get; set;}
}

控制器

public ActionResult Detail(Guid? id)
{
    //Model initialized
    SuperModel model =  GetTheModel();

    //Then there were 2 foreach loops throu my einumerables
    foreach(var item in model.memberList1)
    {
        //Do things
    }
    foreach(var item in model.memberList2)
    {
        //Do things
    }

}

如果我只离开调试器中的1个循环,那么调试器就中断了。

解决方法

public ActionResult Detail(Guid? id)
{
    //Model initialized
    SuperModel model =  GetTheModel();

    //Then there were 2 foreach loops throu my einumerables
    model.memberList1.ToList().Foreach((item) => 
    { 
        //Do Things
    });
    model.memberList2.ToList().Foreach((item) => 
    { 
        //Do Things
    });

}

芬兰

我不知道为什么使用.ForEach方法有效而使用经典的foearch()循环无效。但是,如果有人遇到类似问题,希望对您有所帮助。