C语言拯救者 番外篇 (Windows实用调试技巧)

目录

1.1 调试是什么?

2.1 Debug和Release

2.2 下面程序在Debug和Release版本的区别

2.3 快捷键的使用方法

2.4例题:我想知道153是否为自幂数,你是否在傻乎乎的一直按着F10 ,那当i=100000要按多久?

 3.1 通过调试找出代码问题

实现代码:求 1!+2!+3! ...+ n! ;不考虑溢出。(下面代码有错误)

3.2 如何写出好(易于调试)的代码 

3.3 模拟实现库函数:strcpy(字符串拷贝)

my_strcpy函数设计返回值类型char*是为了实现函数的链式访问

4.1 Const练习解释

5.1 编程常见的错误

5.2 编译性错误就是语法错误

5.3 链接型错误



1.1 调试是什么?有多重要?

 调试(英语:Debugging / Debug),又称除错,是发现和减少计算机程序或电子仪器设备中程序错误的一个过程。


2.1 Debug和Release

Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。

Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优 的,以便用户很好地使用。(不能调试)

2.2 下面程序在Debug和Release版本的区别

#include <stdio.h>
int main()
{
    int i = 0;
    int arr[10] = {0};
    for(i=0; i<=12; i++)
   {
        arr[i] = 0;
        printf("hehe\n");
   }
    return 0;
}

在debug版本中,程序死循环;在release版本中,程序可以执行

原因在于:变量在内存中开辟的顺序发生了变化,影响到了程序执行的结果。

代码运行的结果:大概率是死循环

首先arr只有10个元素,但是i循环到12次,arr[10]的时候已经越界访问了.首先i和arr是局部变量,先创建i,再创建arr,又因为局部变量都是放在栈区上的,那栈区的使用习惯是先使用高地址,再使用低地址

i如果先初始化就放在上面,arr就是数组,但是数组的下标的增长地址是由低到高来增长的,数组如果越界了,也许有一次越界到了i所在的地址,把i的地址和arr数组的地址改为了0,for循环就重新开始计算了,为什么说结果大概率是死循环呢,因为你不知道arr数组和i的地址中间差了几个字节,但是如果arr数组越界访问到i的话就会死循环

把arr和i放反也是因为栈区的使用习惯,i如果后初始化的话,i就是低地址空间,这样arr越界访问就永远不会访问到i的地址,所以他会打印完后程序崩溃

中间空了多少是编译器自己的写法问题,比如你去其他平台也许空的都不一样,那为什么会死循环不会报错呢?因为程序一直在跑,for循环没有停下来,虽然arr越界访问了,但是程序必须得先执行完才能够报错,得完成一件事情才行


	int main()
	{
		int i = 0;
		int arr[10] = {1,2,3,4,5,6,7,8,9,10};
		printf("%p\n", &i);
		printf("%p\n", &arr[9]);
		}
 

可以佐证,栈区空间使用习惯先使用高地址,再使用低地址

 


2.3 快捷键的使用方法

1.F5 开始调试

使用方法:直接按F5程序直接结束了,不能单独使用,需要配合F9(断点)使用

(多次按F5,会在原有逻辑断点处停下,例如循环从一次变为两次,停在下一次循环断点处),有人会发现按F5没有反应,这时候需要加上Fn+F5  or Fn+F10

2.Ctrl +F5 不调试,直接执行代码

3.F9  设置/取消 断点

使用方法:代码执行,按下F5,只有遇到断点F9处才停下

4.Ctrl + F 查找关键字

5.Ctrl +K+C 添加注释(配合全选使用)  Ctrl + K+U取消注释

6.C语言中复制不需要选中复制,直接在需要复制的那一行按Ctrl+V,即可复制

此外,还有更多的快捷键,博客添加到下面

VS中常用的快捷键_MrLisky的博客-CSDN博客_vs快捷键

有同学发现,我打开调试->窗口,并没有发现监视是为什么?

这是因为,监视里的很多窗口是需要调试开始的时候才会显示出来,监视就是用来配合代码查错,要多练习

  • 40
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北方留意尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值