VS调试:函数断点与数据断点

  • Post author:
  • Post category:其他


断点,是Debug过程中最常用的功能。

关于断点VS还有很多高级功能,本文使用的是VS2017,介绍函数断点与数据断点的使用场景以及使用方法。



1.普通断点

普通断点是最常接触的断点,VS中,在代码行左边栏灰色区域点击,或者把光标放在某代码行按下F9即可设置断点。

这种断点,其实更多可能是设置在某个语句上,可以执行这句语句前所有代码,运行到改行停止且未执行该行代码。进入调试后,还可以选择逐语句(快捷键F10),逐过程(快捷键F11)调试。

停滞在语句上,意味着要对某行语句有特殊的观察目的或是明确此语句可能是bug出现的地方,才能够明确的把断点设置在此断点上,但这种调试的方法效率十分低下,对于每个语句都需要有把握才行。


以下断点只有进入调试后才能进行设置:调试->新建断点->函数断点或数据断点



2.函数断点



使用方法

顾名思义,函数断点,按下快捷键Ctrl+B可以进入窗口,输入想要调试的函数名,当点击确定后调试,则每次调试遇到进入函数时,都会击中断点。

要注意的是,断点仍然只能得到在该函数运行前的全局变量以及参数值。

在这里插入图片描述

另外,可以看到函数名下有条件断点,有三种类型的条件断点。其中

条件表达式断点

,此条件断点可以设置运行函数前存在的所有变量条件作为约束,当满足此条件时停止。

除此外,还有满足命中次数断点以及筛选器断点(多线程使用)。


命中次数

:比如你怀疑程序出错点发生在 N 次循环之后或者某些次循环,那么可以设置循环语句内的命中次数,让它在某些次或者某次循环停下来,而不是每次都停下来。


筛选器



筛选器是用来限制断点命中时所在的设备、进程和线程。比如,在一个多线程的程序中,你不必手动 GetThreadId,可以通过筛选器,设置让它只在某线程中执行到此处时停下来。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述



应用场景

我们在断点的窗口可以看到所设置的断点,另外还可以看到当前函数的数值。

在这里插入图片描述

  1. 当函数传入参数错误,可以设置函数断点,以参数正确的否命题作为条件,则可以进入参数状态错误的时候进行调试,打印所需要数据信息,追溯错误发生的源头。
  2. 查看某函数的作用以及测试某函数的正确性时,可以设置函数断点查看数据变化情况。



3.数据断点



使用方法

数据断点的意义,是让程序在某处地址指定字节发生改变的时候中断下来。数据断点同样有条件断点选项。

在这里插入图片描述

使用的话,可以用

&参数名

的方式,也可以调试时,监视所需参数,加&查看当前变量的地址,然后在该栏下输入地址。

在这里插入图片描述



应用场景

用于检测任意变量,包括类中或者结构体中某个成员变量的值发生了变化,如果此时设置了数据断点,只要该变量的值发生了变化就会触发数据断点,导致程序中断。用于Debug时,查找莫名其妙改变值的变量,用于锁定隐藏bug,以及通过堆栈信息梳理逻辑漏洞。

本文参考:


VS教程之断点

文章里面还有用调用堆栈以及反汇编的方法设置代码。



版权声明:本文为weixin_42098322原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。