是否有一种方法可以将一个手表放在变量上,并且只在该值发生变化时才有Visual Studio中断?

这将使找到棘手的州问题变得容易得多。

这能做到吗?

断点条件仍然需要断点设置,我宁愿设置一个监视表,让Visual Studio在状态更改时设置断点。


当前回答

您可能可以巧妙地使用DebugBreak()函数。

其他回答

假设您有一个名为a的类,声明如下。

class A  
{  
    public:  
        A();

    private:
        int m_value;
};

当有人修改了"m_value"的值时,你希望程序停止。

转到类定义并在a的构造函数中放置断点。

A::A()
{
    ... // set breakpoint here
}

一旦我们停止程序:

调试->新断点->新数据断点…

地址:&(这- > m_value) 字节计数:4(因为int有4个字节)

现在,我们可以继续这个项目了。当值被更改时,调试器将停止。

您可以对继承类或复合类进行同样的操作。

class B
{
   private:
       A m_a;
};

地址:&(这- > m_a.m_value)

如果不知道要检查的变量的字节数,可以使用sizeof操作符。

例如:

// to know the size of the word processor,  
// if you want to inspect a pointer.
int wordTam = sizeof (void* ); 

如果你看一下“调用堆栈”,你可以看到改变变量值的函数。

右键单击断点对我来说很好(尽管我主要是将它用于特定变量值上的条件断点。即使中断涉及线程名称的表达式,如果您试图发现线程问题,这也是非常有用的)。

将变量更改为属性,并在set方法中添加断点。例子:

private bool m_Var = false;
protected bool var
{
    get { 
        return m_var;
    }

    set { 
        m_var = value;
    }
}

我记得你用Visual Basic 6.0描述它的方式。在Visual Studio中,到目前为止我发现的唯一方法是指定断点条件。

在Visual Studio 2005菜单中:

调试->新断点->新数据断点

输入:

&myVariable