前⾔
调试技巧是衡量程序员⽔平的⼀个重要指标.掌握好的调试技巧与⼯具的使⽤⽅法,也是⾮常重要的.
Visual Studio 调试程序有助于你观察程序的运⾏时⾏为并发现问题。 该调试器可⽤于所有 Visual Studio 编程语⾔及其关联的库。 使⽤调试程序时,可以中断程序的执⾏以检查代码、检查和编辑变量、查看寄存器、查看从源代码创建的指令,以及查看应⽤程序占⽤的内存空间。
断点,可以说是 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 = valueProcessName = \"name\"ThreadId = valueThreadName = \"name\"
多个表达式之间可以使⽤运算符 & (AND), || (OR), ! (NOT) 连接 。3. 追踪断点
在断点设置窗⼝,除了条件,我们还可以看到操作 (Action)选项框。
操作 (Action) 的意义是设置追踪点 (Tracepoint)。
Tracepoint 相当于是⼀种临时的有 Trace 功能的断点,它会把消息打印到 Output 窗⼝。
勾选后⾯的继续执⾏ (Continue Execution),代表 Tracepoint 命中时,Debugger 不会停下来,否则将会在此处停下来。两种情况下,消息都会打印出来。可以使⽤下⾯的关键字作为消息。4. 函数断点
在 Debug 菜单下,点击新建断点,可以新建两种类型的断点:函数断点 (Function Breakpoint)和数据断点(DataBreakpoint)。
函数断点是通过函数名设置断点,当程序执⾏到该函数的时候断点断下来。5. 数据断点
紧接上⾯,这⾥讲下数据断点。
数据断点的意义是,让程序在当某处地址指定字节发⽣改变的时候中断下来。它只有在 Break Mode 下才可以设置。
地址栏可以⽤具体的内存地址,也可以⽤表达式来代表内存地址。例如,可以使⽤ &avar,让程序在当变量 avar 内容发⽣改变的时候中断下来。
6. 在 Call Stack Window 设置断点
也许你不知道,是可以在 Call Stack 窗⼝设置断点的。
当你在查看函数的调⽤关系的时候,想在这⼀些列的函数中快速设置断点,那么其实很简单:在 Call Stack 窗⼝,点击想要设置断点的函数所在的⾏,按下 F9 即可。7. 在 Disassembly Window 设置断点
还可以在 Disassembly 窗⼝设置断点。但前提必须是 Break Mode 下。
反汇编窗⼝设置断点的⽅式跟在源代码中设置断点的⽅式相同,只要在代码左边栏边缘处点击⼀下,红⾊圆点就出现了。
8. 断点管理
我们前⾯所设置的所有断点都会出现在断点窗⼝ (Breakpoints Windows)。
在这⾥,可以对所有的断点进⾏管理,⽐如批量启⽤、禁⽤、删除等,还可以在程序运⾏过程中,查看断点的命中状态。当你的⼯程⾮常⼤,Debug 时设置了很多的断点的时候,它会⾮常有⽤。总结
以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,如果有疑问⼤家可以留⾔交流,谢谢⼤家对的⽀持。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- sceh.cn 版权所有 湘ICP备2023017654号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务