【问题标题】:Visual Studio 2017 - Cant view variables when in debug modeVisual Studio 2017 - 在调试模式下无法查看变量
【发布时间】:2019-02-28 14:53:03
【问题描述】:

我一直在尝试解决这个问题。

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

我做了什么:

  • 玩转托管兼容模式
  • 清理和重建以及所有这些基础知识
  • 删除本地解决方案并从 Git 中获取新的解决方案
    • 从事同一解决方案的其他开发人员没有此问题
  • 尝试在 VS2015 和 VS2019 Preview 中调试解决方案

似乎无法解决这个问题,还有什么我可以尝试的想法吗?

编辑:澄清一下,我可以在调试的时候单步执行代码,但是我不能查看变量的值。

EditEdit:正在做一些测试,我有新信息。虽然一个断点,但我会查看一些变量。

  • public ActionResult Detail(Guid?id)> 可以查看id的值
  • SomeObject item = someobjectRepository.GetItem(id).SingleOrDefault() > 获取项目但无法查看其变量
  • 后面代码foreach(var subitem in item.Subitems) > 可以查看subitem的值。

编辑编辑编辑

无法全部查看的变量已过时。

为了测试目的,我删除了模型的所有变量,因此完全为空,然后我对其进行了初始化

public MySuperModel()
{
}

初始化

MySuperModel model = new MySuperModel();

通过悬停或添加到手表/快速手表来查看模型会产生它已经过时的消息。

等等,很奇怪

【问题讨论】:

  • 我试过了 :) 也试过重新安装 2015 和 2019
  • 项目类型是什么?
  • Asp.net Web 应用程序。
  • 呃!需要一段时间,但我正在努力。我会回来报告的。

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


【解决方案1】:

screenshot - not showing

screenshot - showing

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

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

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

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();

【讨论】:

  • 虽然我很欣赏这个答案,但我认为你误解了我的意思。列表或模型包含数据并将其返回给视图。没有数据丢失,只是在调试时大部分数据无法查看。
【解决方案2】:

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

我会尽力解释。

我有一个包含 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 方法有效,而使用经典的 foarch() 循环则无效。但如果有人遇到这样的事情,我希望这能有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 2020-12-11
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多