调试的进一步学习
补充:调用堆栈
例:
#include<stdio.h>
void test2()
{
printf("This is duizhai.\n");
}
void test1()
{
test2();
}
void test(){
test1();
}
int main()
{
test();
return 0;
}
以上的函数可以用调用堆栈进行理解,(调用堆栈 同样是一种调试手段)。
这种方式可以为我们反馈函数的调用逻辑,所以当我们在面对多个函数调用和嵌套时,这会是一个不错的理解方法。
接下来,我将讲解更加有具体的方法和个别有意思的案例
一.如何将断点设置在循环语句的内部
鼠标右键点击断点处,找到"条件"选项,设置条件断点。
二.如何解决实际遇到的运行错误
1.首先要对代码运行的结果有个预期,通过调试,我们一旦发现结果与预期不一致,这可能就是我们代码出错的地方
2.举例
int main()
{
int i;
int arr[10]={1,2,3,4,5,6,7,8,9,10};
//定义i和arr这个变量和数组
for(i=0;i<=12;i++) //显然这里发生了越界访问,程序肯定是运行出错,结果是这样的吗?
{
arr[i]=0;
printf(“陷阱.\n”);
} //执行循环语句.
return 0;
}
猜一猜代码结果会是什么?
可能报错,也可能一直循环进行…
为什么会一直循环的进行?这是一种有一定逻辑的巧合。
首先,我们定义了i和arr这俩个局部变量。局部变量是存放在栈区的,根据栈区内存的使用习惯,先使用高地址再使用低地址空间。 所以我们可以自己画一副草图。
栈区
高地址 i的地址在这 | |
---|---|
… | |
arr[7] | |
低地址 arr[4] | |
arr[0] |