文章目录
一、断点调试
示例以VS2008为例
// testVSDebug.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
unsigned int GetMin(unsigned int nParam1, unsigned int nParam2)
{
//这里默认输入的2个参数不等
if (nParam1 < nParam2)
{
return nParam1;
}
return nParam2;
}
int _tmain(int argc, _TCHAR* argv[])
{
unsigned int nParam1 = 12;
unsigned int nParam2 = 20;
unsigned int nRet = GetMin(nParam1, nParam2);
printf("获取到的最小值为 %d\n", nRet);
system("pause");
return 0;
}
1、单点调试
1)可以将鼠标移动到想要下断点的行,按下F9,如果按下F9出现
可以看看是不是安装了有相同快捷键或者卸载了软件没有重启系统,重启一下就可以了。
2)将鼠标移动到想要下断点的行的左侧空白位置,按下鼠标左键
2、调试
以上述示例为例,可以按下键盘的F5快捷键,或者菜单栏——调试——启动调试,如下
这样就进入调试状态了,如下图,运行到断点处了
最终结果是:
相关调试快捷键
含义 | 快捷键 |
---|---|
跳转到下一个断点处 | F5 |
停止调试 | Shift+F5 |
逐语句 | F11 |
逐过程 | F10 |
跳出 | Shift+F11 |
切换断点 | F9 |
删除所有断点 | Ctrl+Shift+F9 |
3、断点管理
Alt + F9,或者菜单栏——调试——窗口——断点,如下:
由图:
1)命中次数中,如果显示"(当前为1)"说明程序运行到当前断点
2)把项红点签名的√去掉的话,对应行的断点就去掉了,程序F5继续运行的话就不会在改位置停止
4、条件变量
我们通常会遇到这种情况:在循环中调试的时候,想让值为约定值时触发调试。如果循环次数多的话,我们F5也是效率很低的,那有没有什么方法可以直接让程序判断值为约定值就停止的方法呢?还真有,如下步骤:
1)在循环体内设置一个断点(最好是第一行)
2)到断点列表(vs菜单栏——debug——windows——breakpoints),在弹出的窗口中找到要设置条件的断点,右键断点选择condition,设置条件,如下:当i9960时触发断点
确定之后,如下:
启动程序,这个时候只有等i9960时程序才会进入断点。如果条件变量需要设置字符串的值,建议直接修改代码的方式会简单一点.
5、悬停鼠标查看表达式的值
直接将鼠标放在要显示的变量上即可。
也可以通过watch窗口查看变量的值
6、在运行中修改值
基于5,如下:原本是i==0的,修改为i=1
7、回退测试
在测试中会存在这样的场景:直接F10发现一个函数的返回值和预期的不符合,这个时候重新启动测试?不不不,还有更好的方法,我们可以将换色的箭头直接拖到想要重新调试的位置,基于6中i=1的场景,想测试i=0的场景
8、编辑接着继续运行
在大型的项目中,调试往往是很复杂的,因此在发现一个问题的情况下,最好是直接修改代码并继续运行检查是否有问题。这时候VS会提示代码被修改,默认执行即可。
9、查看堆栈信息
vs菜单栏——debug——windows——call stack\threads
这样就可以查看存在匹配pdb的程序的调用栈流程\线程信息
10、内存窗口
vs菜单栏——debug——windows——memory——选择一个内存窗口即可,在弹出窗口中输入地址,就可以显示对应地址内存的值
11、伪变量
https://docs.microsoft.com/zh-cn/visualstudio/debugger/pseudovariables?view=vs-2019