当前位置:  开发笔记 > 编程语言 > 正文

使用Visual Studio调试器更改值时中断

如何解决《使用VisualStudio调试器更改值时中断》经验,为你挑选了5个好方法。

有没有办法将监视放在变量上,只有在该值发生变化时Visual Studio才会中断?

这样可以更容易地找到棘手的状态问题.

可以这样做吗?

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



1> AShelly..:

在Visual Studio 2005菜单中:

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

输入:

&myVariable


这是否可用于托管代码?我看到C#项目禁用了此选项.记得在某处阅读这是一个很难实现调试托管应用程序的功能,特别是涉及垃圾收集器.
不幸的是,它仅适用于非托管代码:http://msdn.microsoft.com/en-us/library/350dyxd0.aspx
您还可以临时将字段转换为属性,并在getter或setter上放置断点.
"Debug - > New Breakpoint"下的"Data Breakpoint"选项被禁用..任何想法为什么?它是否保持禁用或者不是我实际调试与否.我正在使用Visual Studio 2015.

2> Michael Petr..:

您还可以选择在代码中明确断开:

// Assuming C#
if (condition)
{
    System.Diagnostics.Debugger.Break();
}

来自MSDN:

Debugger.Break:如果未附加调试器,则会询问用户是否要附加调试器.如果是,则启动调试器.如果附加了调试器,则使用用户断点事件发出调试器信号,并且调试器暂停执行该进程,就像调试器断点已被命中一样.

不过,这只是一个后悔.如其他注释中所述,在Visual Studio中设置条件断点是更好的选择.


FWIW,有编辑和继续,我更喜欢这样做:IME,条件断点是sloooow

3> Craig..:

真的很老的帖子,但万一有人不知道......

Visual Studio 2015中,您可以在set自动实现的属性的访问器上放置断点,并且在更新属性时调试器将中断

public bool IsUpdated
{
    get;
    set;    //set breakpoint on this line
}

更新

另外; @AbdulRaufMujahid在评论中指出,如果自动实现的属性在一行上,你可以将光标定位在get;or set;和hit上,F9并相应地放置一个断点.太好了!

public bool IsUpdated { get; set; }


即使自动实现的属性在一行中,例如公共字符串UserName {set; 得到; }.用户可以突出显示getter或setter,并可以按F9添加断点

4> momboco..:

想象一下,你有一个名为A的类,声明如下.

class A  
{  
    public:  
        A();

    private:
        int m_value;
};

当某人修改"m_value"的值时,您希望程序停止.

转到类定义并在A的构造函数中放置一个断点.

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

一旦我们停止了该计划:

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

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

现在,我们可以恢复该计划.更改值时,调试器将停止.

您可以对继承的类或复合类执行相同的操作.

class B
{
   private:
       A m_a;
};

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

如果您不知道要检查的变量的字节数,可以使用sizeof运算符.

例如:

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

如果查看"调用堆栈",您可以看到更改变量值的函数.


如果您尝试调试外部库,则需要以调试模式编译的库.我对组件不熟悉,但也许你可以将"回调"连接到属性并在其中放置一个断点.我描述的表单需要内存地址,如果您无法知道,则需要搜索其他方法.

5> 小智..:

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

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

    set { 
        m_var = value;
    }
}

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有