在C语言来调试机器所检查不出来的错误,这是机器所不能达到的,来查看程序员的功力。
下面来看一下基础操作
F5:进行调试的开始
CTRL+F5:开始运行不调试
F10:逐语句进行调试
F11:能进入到函数内部进行更细微的调试
F9 : 断点和取消断点
注意:在调试过程中要设置成debug开发版本
把ESC+FN打开
如果无 法进行调试,可以选中代码来进行调试。
彩蛋:好用快捷键推荐:
ctrl+k+c注释
ctrl+k+u取消注释
监视窗口:自动窗口
手动输入
局部变量
内存
反汇编
寄存器
调用堆栈:反馈函数调用逻辑
案例1:
int main()
{int i = 0;int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };for (i = 0; i <= 12; i++){arr[i] = 0;printf("hehe\n");}return 0;
}
测试发现:arr之后会越界访问;
栈区规律:
1.i和arr是局部变量
局部变量是放在栈区上的
栈区内存的使用习惯是:
先使用高地址空间,再使用低地址空间;
2.数组随着下标的增长地址,是由低到高变化的。
#include<stdio.h>
int main()
{int n = 0;scanf("%d", &n);int i = 0;int j = 0;int sum = 1;int ret = 0;for (i = 1; i <= n; i++){ sum = 1;for(j=1;j<=i;j++){sum *= j;}ret += sum;}printf("%d\n", ret);return 0;
}
#include<stdio.h>
#include<string.h>
void void_strcpy(char* dest, char* src)
{/*while (*src != '\0'){*dest = *src;*dest++;*src++;}*dest = *src;*/while (*dest++ = *src++){;}
}int main()
{char arr1[20] = "xxxxxxxxxxxxx";char arr2[] = "hello";void_strcpy(arr1, arr2);/*strcpy(arr1, arr2);*/printf("%s", arr1);return 0;
}