代码之家  ›  专栏  ›  技术社区  ›  Dave

当私有成员变量更改值时,如何停止Visual Studio调试器中的执行?

  •  5
  • Dave  · 技术社区  · 16 年前

    我已经在代码中遇到了一个断点。现在,在我按下continue之前,我想让它在count获得分配给它的新值时停止。

    除了将count提升为字段并在字段的set方法上设置断点之外,还有其他方法可以做到这一点吗?

    5 回复  |  直到 16 年前
        1
  •  3
  •   JaredPar    16 年前

    在托管代码中,您所寻找的是不可能的。在C++中,这就是所谓的数据断点。它允许您在运行程序更改内存块时中断。但这只能在纯本机C++代码中使用。

    这只是实现托管断点的问题之一。

        2
  •  0
  •   JMD    16 年前

    我想你这么做是因为你想知道价值的变化是从哪里来的。您已经说明了我一直使用的方法:创建一个属性,然后断开set访问器(除非您必须始终使用该set访问器才能工作)。

    基本上,我会说,因为私有字段是唯一的存储,所以不能在它上面中断,因为私有字段不是可中断的指令。

        3
  •  0
  •   Kibbee    16 年前

        4
  •  0
  •   Matt Brunell    16 年前

    就像克里斯所评论的那样。您可以设置“数据断点”,但只能为本机(非托管)代码设置。当垃圾收集器运行时,垃圾收集器将移动分配的内存块。因此,托管代码不可能有数据断点。

    否则,不能。您必须封装对要“修改时中断”的项目的访问权限。由于它已经是一个私有成员,我建议遵循Kibbee的建议,在使用它的地方设置断点。

        5
  •  0
  •   ChrisW    16 年前

    使其成为其他类的属性,创建该类的实例,并在该属性上设置断点。

    test()
    {
       int i = 3;
       ...etc...
       i = 4;
    }
    

    ... 有

    class Int
    {
      int m;
      internal Int(int i) { m = i; }
      internal val { set { m = value; } get { return m; } }
    }
    
    test()
    {
      Int i = new Int(3);
       ...etc...
       i.val = 4;
    }
    

    问题是,使用C#,所有东西的实际内存位置都在不断移动:因此调试器无法轻松使用CPU的“内存访问中断”调试寄存器,而调试器更容易实现代码位置断点。

    推荐文章