Visual Studio 调试技巧 (二)-- 为中断设置条件

时间:2023-03-09 21:49:07
Visual Studio 调试技巧 (二)-- 为中断设置条件

今天尽是干货。我们来讨论如何为中断设置条件吧。

就像习大大讲的精确扶贫一样,如果我们能很精确地,仅在需要的时候把断点命中,以查看这个时候的程序数据,我们就能显著地提高 Debug 的效率。为断点设置条件能帮助我们更准确快速地发现程序的痛点。
基础方法与步骤:
  1. 移动光标进入要设断点的代码行
  2. 点击F9以设置断点
  3. 右键点击那个熟悉的红圈圈,然后击中菜单 Conditions...
  4. 在弹出的窗口中,我们在第一个下拉框中选择中选择不同的项可以为这个断点设置不同的中断条件
  • 条件表达式:访问上下文中的变量,可以设置命中的条件表达式。仅当表达式满足或者不满足的时候断点才真正生效。如下图中的例子,如果不设置条件,断点将会命中三次。设置了 keyValuePair.Key == "2" 之后,只会命中一次, 在 Key 为 “2” 的时候。
  • 击中次数:如果一行代码会被执行10次,而我们仅仅对最后两次感兴趣,我们可以设置 Hit Count > 8.
  • 过滤条件:我们可以通过机器,线程或者进程的一些属性来过滤断点。
今天尽是干货。我们来讨论如何为中断设置条件吧。
就像习大大讲的精确扶贫一样,如果我们能很精确地,仅在需要的时候把断点命中,以查看这个时候的程序数据,我们就能显著地提高 Debug 的效率。为断点设置条件能帮助我们更准确快速地发现程序的痛点。
基础方法与步骤:
  1. 移动光标进入要设断点的代码行
  2. 点击F9以设置断点
  3. 右键点击那个熟悉的红圈圈,然后击中菜单 Conditions...
  4. 在弹出的窗口中,我们在第一个下拉框中选择中选择不同的项可以为这个断点设置不同的中断条件
  • 条件表达式:访问上下文中的变量,可以设置命中的条件表达式。仅当表达式满足或者不满足的时候断点才真正生效。如下图中的例子,如果不设置条件,断点将会命中三次。设置了 keyValuePair.Key == "2" 之后,只会命中一次, 在 Key 为 “2” 的时候。
  • 击中次数:如果一行代码会被执行10次,而我们仅仅对最后两次感兴趣,我们可以设置 Hit Count > 8.
  • 过滤条件:我们可以通过机器,线程或者进程的一些属性来过滤断点。
Visual Studio 调试技巧 (二)-- 为中断设置条件
迈进一小步:
如果一个方法会被很多地方调用,有些调用者还是别人的代码(我们没有调试符号)。我们能不能根据调用者(caller)的名字来过滤呢?比方说我们有如下一个方法:
Visual Studio 调试技巧 (二)-- 为中断设置条件
Visual Studio 调试技巧 (二)-- 为中断设置条件
当然,回答是肯定的。我们需要把这个方法做一点小小的修改, 添加一个带 CallerMemberName 特性并拥有默认值的参数 caller。之后,我们就可以根据 caller 来设置条件了。如下图所示,我们只有在调用者为 Calculator 的时候断点才会命中。
Visual Studio 调试技巧 (二)-- 为中断设置条件
 Visual Studio 调试技巧 (二)-- 为中断设置条件
没有调试代码,也没有调试符号也可以调试吗?是的!不过,这是下次我们讨论的话题。
迈进一小步:
如果一个方法会被很多地方调用,有些调用者还是别人的代码(我们没有调试符号)。我们能不能根据调用者(caller)的名字来过滤呢?比方说我们有如下一个方法:
Visual Studio 调试技巧 (二)-- 为中断设置条件
当然,回答是肯定的。我们需要把这个方法做一点小小的修改, 添加一个带 CallerMemberName 特性并拥有默认值的参数 caller。之后,我们就可以根据 caller 来设置条件了。如下图所示,我们只有在调用者为 Calculator 的时候断点才会命中。
Visual Studio 调试技巧 (二)-- 为中断设置条件
没有调试代码,也没有调试符号也可以调试吗?是的!不过,这是下次我们讨论的话题。