前言
主要调试方法:
1、打印数据 2、普通断点 3、条件断点与条件追踪 4、单步调试 5、添加监视
1-打印数据
最基础的调试方法就是在程序运行过程中打印数据。
#include<iostream>
using namespace std;
int main()
{
int a = 0;
for (int i = 0; i < 10; i++)
{
a = a + i;
if (i == 5)
cout << "debug: i==5, a=" << a << endl;
}
cout << a << endl;
return 0;
}
输出:
debug: i==5, a=15
45
在上面程序中,需要注意的是如果if
语句输出的信息是仅仅给程序员看的,在release版本中不希望出现,就可以给if
语句加上宏。这样,在release版本中if
语句就会直接变成灰色不会执行。
int main()
{
int a = 0;
for (int i = 0; i < 10; i++)
{
a = a + i;
#ifdef _DEBUG
if (i == 5)
cout << "debug: i==5, a=" << a << endl;
#endif // _DEBUG
}
cout << a << endl;
return 0;
}
debug模式下输出:
debug: i==5, a=15
45
release模式下输出:
45
2-普通断点
断点调试都要在debug模式下,release版本中是直接跳过断点的
2-1断点快捷键
F9
-插入断点
Ctrl+F9
- 禁用断点
Ctrl+Shift+F9
-删除所有断点
3-条件断点与条件追踪
使用普通断点进行调试时,可以为断点添加条件,就是满足什么条件时,这个断点才会生效,用在循环里效果显著。有两种方式设置断点条件:
1)鼠标在断点上方悬停会出现设置按钮;
2)直接在断点行右键【断点】【条件】
设置断点条件后,断点提示信息会更新如下:
还可以在到达条件断点时,添加在该断点时的操作,如下:
注意在操作输出时,变量必须加{}
,否则就会输出为字符串
另外还可以使用$
来调用系统本身的变量,如线程、进程来输出
4-单步调试
主要区分就是几个调试按钮
逐过程(F10
):遇到函数不会进入
逐语句(F11
):遇到函数会进入
对于单行不可展开的语句,逐过程与逐语句发挥作用相同
跳出(shift+F11
):进入函数后想跳出,就要适用
参考:visual studio 2019 :逐过程逐语句Debug
5-添加监视
选中变量【添加监视】
5-1快速监视
在数组传进函数中时,通常传入数组地址,将数组的指针添加监视只能看到当前指向的元素,如果进行【快速监视】就能看到当前指向元素后面的信息。
下面的图就是在局部变量中指针pArr
只能显示当前指向的元素,如果想显示更多信息就需要使用快速监视
选中指针pArr
,右键【快速监视】,在指针后面输入,5
,点击【重新计算】,会显示从当前元素开始向后共5个元素,如果逗号后面的数字太大使数组越界,就是混乱数据了。