从 0 到 1 学习 Visual Studio Debug 之四:断点


prtyaa
prtyaa 2023-12-25 16:09:15 49708
分类专栏: 资讯

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

但是大家最熟悉最经常使用的可能就是普通的断点。其实,关于断点,Visual Studio 有很多的高级功能,有些简直就是调试利器啊。

 

本次教程将介绍 Visual Studio 关于断点的更多高级玩法。

 

 

1. 普通断点

为了保证内容完整性,还是要说下普通断点。

设置普通断点的方法很简单,就是在代码行的左边栏灰色区域点击或者把光标放在某代码行,按下 F9。

 

如上图所示,此时左边栏出现的红色圆点就代表了一个断点。

按下 F5, Debugger 就会在此处停下来。

 

 

 

2. 条件断点

不像是普通的断点,程序每次执行都会停下来。条件断点的意义是,只有在条件被满足时,Debugger 才会在此处停下来。

设置条件断点一般的方法是在红点处右键选择条件或者把光标放在红点处,等待齿轮图标出现并点击。

 

条件断点设置窗口如下。

 

总共有三种类型的条件断点:

条件表达式 (Conditional Expression)

命中次数 (Hit Count)

筛选器 (Filter)

 

 

条件表达式

条件表达式也有两种类型:

为 ture (Is ture)

如下图示,此处设置的条件为: 当 testInt == 4 is ture 时命中断点。

 

更改时 (When changed)

如下图示,此处设置的条件为: 当 testInt 被更改的时候命中断点。

 

 

命中次数

命中次数在 Debug 循环语句时非常有用。

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

如下图,设置的条件为:让它每隔一次循环断下来。

 

 

筛选器

筛选器是用来限制断点命中时所在的设备、进程和线程。

比如,在一个多线程的程序中,你不必手动 GetThreadId,可以通过筛选器,设置让它只在某线程中执行到此处时停下来。

 

筛选器表达式用法为:

MachineName = "name"

ProcessId = value

ProcessName = "name"

ThreadId = value

ThreadName = "name"

多个表达式之间可以使用运算符 & (AND), || (OR), ! (NOT) 连接 。

 

 

 

 

3. 追踪断点

在断点设置窗口,除了条件,我们还可以看到操作 (Action)选项框。

 

操作 (Action) 的意义是设置追踪点 (Tracepoint)。

Tracepoint 相当于是一种临时的有 Trace 功能的断点,它会把消息打印到 Output 窗口。

勾选后面的继续执行 (Continue Execution),代表 Tracepoint 命中时,Debugger 不会停下来,否则将会在此处停下来。两种情况下,消息都会打印出来。

可以使用下面的关键字作为消息。

 

 

 

 

4. 函数断点

在 Debug 菜单下,点击新建断点,可以新建两种类型的断点:函数断点 (Function Breakpoint)和数据断点(Data Breakpoint)。

 

函数断点是通过函数名设置断点,当程序执行到该函数的时候断点断下来。

 

 

 

5. 数据断点

紧接上面,这里讲下数据断点。

数据断点的意义是,让程序在当某处地址指定字节发生改变的时候中断下来。它只有在 Break Mode 下才可以设置。

 

地址栏可以用具体的内存地址,也可以用表达式来代表内存地址。例如,可以使用 &avar,让程序在当变量 avar 内容发生改变的时候中断下来。

 

 

 

6. 在 Call Stack Window 设置断点

也许你不知道,是可以在 Call Stack 窗口设置断点的。

 

当你在查看函数的调用关系的时候,想在这一些列的函数中快速设置断点,那么其实很简单:在 Call Stack 窗口,点击想要设置断点的函数所在的行,按下 F9 即可。

 

 

 

 

7. 在 Disassembly Window 设置断点

还可以在 Disassembly 窗口设置断点。但前提必须是 Break Mode 下。

 

反汇编窗口设置断点的方式跟在源代码中设置断点的方式相同,只要在代码左边栏边缘处点击一下,红色圆点就出现了。

 

 

 

8. 断点管理

我们前面所设置的所有断点都会出现在断点窗口 (Breakpoints Windows)。

 

在这里,可以对所有的断点进行管理,比如批量启用、禁用、删除等,还可以在程序运行过程中,查看断点的命中状态。

当你的工程非常大,Debug 时设置了很多的断点的时候,它会非常有用。

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=30597
赞同 0
评论 0 条
prtyaaL2
粉丝 1 发表 2553 + 关注 私信
上周热门
如何使用 StarRocks 管理和优化数据湖中的数据?  2959
【软件正版化】软件正版化工作要点  2878
统信UOS试玩黑神话:悟空  2843
信刻光盘安全隔离与信息交换系统  2737
镜舟科技与中启乘数科技达成战略合作,共筑数据服务新生态  1270
grub引导程序无法找到指定设备和分区  1235
华为全联接大会2024丨软通动力分论坛精彩议程抢先看!  165
点击报名 | 京东2025校招进校行程预告  164
2024海洋能源产业融合发展论坛暨博览会同期活动-海洋能源与数字化智能化论坛成功举办  163
华为纯血鸿蒙正式版9月底见!但Mate 70的内情还得接着挖...  159
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
信创开放社区邀请他人注册的具体步骤如下 15
如何玩转信创开放社区—从小白进阶到专家 15
方德桌面操作系统 14
我有15积分有什么用? 13
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

加入交流群

请使用微信扫一扫!