原来断点还能这样用,你知道吗?

在调试一个项目的时候,“断点” 应该是最常要用到的工具了,你一般会怎么样去使用断点呢? 命中断点的时候,查看或修改下当前上下文的变量值?在 “即时窗口” 中运行代码?查看下调用栈?设置watch? 


上面的这些方式,想必很多人都会用到。但除此之外,你还知道其它的用法吗? 下面,让我来介绍几个断点的其它用法~~ 


本文所述内容适用于 Visual Studio 2010、Visual Studio 2012,语言版本为 C#。其它版本或语言的可能会有些不同,请酌情参考。

条件断点

假设我们有一个循环1W次的语句,恰巧在第1000次时出现错误,你肯定不希望这个断点每次循环都会命中,而是在第1000次时才会命中。实现这个愿望很简单,我们F9 设置断点后,右键单击要设置条件的断点(会跳出如 图1 所示菜单),然后选择 “条件断点”(如图2所示),在输入框中输入你希望命中的条件就OK了(,该输入框支持 Ctrl + J 强迫智能提示)。

图1 选中条件断点


图2 设置条件


图4 动画演示(点击放大后查看)


在图2中,可以看到,除了允许在条件为真时命中断点,也可以当输入框中的值发生变化时命中断点。


命中次数

顾名思义,就是当该断点在命中几次后才会中断程序的运行。上面的例子其实并不需要用条件断点,使用命中次数能更容易地实现目的,我们只需要设置命中次数为1000就可以了。

图5 选择 “命中次数”


图6 选择条件,并设置次数


图7 动画演示(点击放大后查看)


注:多线程情况下,命中次数是多个线程命中次数之和。如果只想统计某一线程命中次数,你需要同时设置筛选器(下一节中会介绍)。

筛选器

当调试有 N 多线程并发的程序时,可能在执行了一段时间后,会发现某个线程似乎有点问题,这个时候就可以考虑使用筛选器设置只对某一线程或进程中断程序。

图8 选择 “筛选器”


图9 设置过滤器


图10 动画演示(点击放大后查看)


在实际调试中,我们可能不会设置 ThreadName,这个时候可以先通过设置普通断点,然后利用 Visual Studio 的线程窗口查看对应的线程,而后使用筛选器断点调试。


命中条件(跟踪点)

有些时候,我们可能在命中断点的时候不希望中断程序(尤其是遇到那些有时间限制的业务逻辑),而是输出一些信息,从而帮助我们进行分析。

图11 选择 “命中条件”


Message 中所输入的格式在窗口中也已经给了明确的规范,只要根据上述规范写,就可以得到想要的输出。

图12 命中条件 设置窗口


图13 动画演示(请放大后查看)


一行允许添加多个断点

如果一行中包含多个可执行语句,则可以设置多个断点。设置断点时,Visual Studio 会在对应的语句用红框包围起来。


参考资源

使用命中次数、调用堆栈函数和条件在 Visual Studio 调试器中您所需的时间和位置进行中断

文章索引

[隐 藏]

本站采用知识共享署名 3.0 中国大陆许可协议进行许可。 ©2014 Charley Box | 关于本站 | 浙ICP备13014059号