如何停止在Visual Studio调试器执行时,一个私有成员变量的变化值?
-
21-08-2019 - |
题
比方说,我的学生都被称为计数的私人整型变量。
我已经在我的代码打一个断点。现在我按下去之前,我想让它这样调试器将停止计数随时得到分配给它的新价值。
除了促进计数字段和设置断点的字段的集合的方法,是否有任何其他的方法来做到这一点?
解决方案
什么你要找的是不是托管代码可能。在C ++中,这被称为数据断点。它可以让你突破时的内存块被正在运行的程序修改。不过,这只是纯原生C ++代码可用。
这是为什么这没有实现短的版本是,它是在托管代码更难。本机代码是不错的和可预测的。您创建的内存,除非你创建一个新的对象(或明确复制存储器),它不走动。
托管代码要复杂得多,因为它是一个垃圾回收的语言。在CLR通常在内存中移动对象。因此,简单地看有点内存不够好。它需要GC相互作用。
这仅仅是与实施管理的破发点的问题之一。
其他提示
我假设你正在试图做到这一点,因为你想看到的值变化是从哪里来的。你已经说过我一直在做它的方式:创建一个属性,并在set访问打破(除了你必须始终使用该组访问这个工作)
基本上,我想说的是,由于私人领域是唯一的存储你不能因为私人领域是不是一个易碎的指令中断。
我能想到的都做到这一点的唯一方法,就是在变量点击右键,选择“查找所有引用”。一旦它找到的所有引用,你可以在对变量的赋值代码中的每个点,新建一个断点。这可能工作得很好,除非你是通过引用传递变量到另一功能,并在那里更改值。在这种情况下,你需要看具体的点在内存中时看到它改变的某种方式。我不知道如果这样的工具在VS存在。
像ChrisW评论。您可以设置一个“数据断点”,但仅适用于本机(非托管)代码。垃圾收集器运行时的垃圾回收器会左右移动分配的内存块。因此,数据断点是不可能的托管代码。
否则,没有。你必须为封装要“上的修改打破”访问您的项目。由于其已经是私有成员,我建议您按照其用于任何设置断点的基比的建议。
除了促进计数字段和设置断点的字段的集合的方法,是否有任何其他的方法来做到这一点?
请它一个不同的类的属性,创建该类的一个实例,并设置在属性一个断点。
代替...
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的“突破内存访问”调试寄存器,它是调试器更容易,相反,实现一个代码位置断点。