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

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

1.普通断点

普通断点是最常接触的断点,VS中,在代码行左边栏灰色区域点击,或者把光标放在某代码行按下F9即可设置断点。
这种断点,其实更多可能是设置在某个语句上,可以执行这句语句前所有代码,运行到改行停止且未执行该行代码。进入调试后,还可以选择逐语句(快捷键F10),逐过程(快捷键F11)调试。
停滞在语句上,意味着要对某行语句有特殊的观察目的或是明确此语句可能是bug出现的地方,才能够明确的把断点设置在此断点上,但这种调试的方法效率十分低下,对于每个语句都需要有把握才行。

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

2.函数断点

使用方法

顾名思义,函数断点,按下快捷键Ctrl+B可以进入窗口,输入想要调试的函数名,当点击确定后调试,则每次调试遇到进入函数时,都会击中断点。
要注意的是,断点仍然只能得到在该函数运行前的全局变量以及参数值。

在这里插入图片描述
另外,可以看到函数名下有条件断点,有三种类型的条件断点。其中条件表达式断点,此条件断点可以设置运行函数前存在的所有变量条件作为约束,当满足此条件时停止。
除此外,还有满足命中次数断点以及筛选器断点(多线程使用)。
命中次数:比如你怀疑程序出错点发生在 N 次循环之后或者某些次循环,那么可以设置循环语句内的命中次数,让它在某些次或者某次循环停下来,而不是每次都停下来。
筛选器
筛选器是用来限制断点命中时所在的设备、进程和线程。比如,在一个多线程的程序中,你不必手动 GetThreadId,可以通过筛选器,设置让它只在某线程中执行到此处时停下来。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

应用场景

我们在断点的窗口可以看到所设置的断点,另外还可以看到当前函数的数值。
在这里插入图片描述

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

3.数据断点

使用方法

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

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

在这里插入图片描述

应用场景

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

本文参考:
VS教程之断点

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

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值