🎬 鸽芷咕:个人主页
** 🔥 个人专栏**:《C语言初阶篇》 《C语言进阶篇》⛺️生活的理想,就是为了理想的生活!
文章目录
📋 前言
🌈hello! 各位宝子们大家好啊,上一章给大家介绍了 Visual Studio 2022功能使用,和一些常用快捷键!
⛳️今天来正式来调试环节,带大家看看程序出现错误时如何进行调试!废话说下面开始实践。
📚本期文章收录在《学习工具》,大家有兴趣可以看看呐!
⛺️ 欢迎铁汁们 ✔️ 点赞 👍 收藏 ⭐留言 📝!
🔥 注:前一篇文章在这里《高效调试手段与技巧(中)》
💬 一些调试的实例
💭 实例一
⛳️ 求 1!+2!+3! …+ n! ;不考虑溢出。我们先来看一下这段代码有什么问题?这时候我们如果输入3,期待输出9,但实际输出的是15。
- 这时就要调试一下看看是哪里出现问题了
- 首先推测问题出现的原因。初步确定问题可能的原因最好。
📚 代码演示:
#include<stdio.h>intmain(){int i =0;int sum =0;//保存最终结果int n =0;int ret =1;//保存n的阶乘scanf("%d",&n);for(i =1; i <= n; i++){int j =0;for(j =1; j <= i; j++){
ret *= j;}
sum += ret;}printf("%d\n", sum);return0;}
📑 代码结果:
📺 调试演示
首先我们可以确定是结果出现的问题,而结果又是循环来计算,我们就可以进去循环然后把监视窗口调开看看是不是这里的问题?
- 3的阶乘应该是 (11)+(12)+(123) =9
**这里我们通过调试就可以看到,我们的循环在第三次的时候就出现错误了。本来 **
ret
** 里面存储的是 **
3
** 的阶乘 **
9
** 可结果却是 **
12
- 这里可以得出我们程序的错误了
ret
这个变量未初始化导致结果与预想不同
📚 代码改进:
💭 实例二(nice公司的笔试题)
前面关于我们结果与预想不一样!如何调试这次我们来看一下 nice公司的笔试题 这道笔试题看看!
- 这道题我们该如何调试
- 看上去这个代码没什么问题,顶多就是多循环了一次
- 可结果却是无限循环
🔥 注:由于nice公司的笔试题,是在linux环境下的,所以博主对代码做了一个调整让他可以在Windows 环境下运行。
📚 代码演示:
本段代码需要再Windows 环境下调位 32位机器才能运行,否则越界容易出现程序崩溃!
#include<stdio.h>intmain(){int i =0;int arr[10]={0};for(i =0; i <=12; i++){
arr[i]=0;printf("hehe\n");}return0;}
📑 代码结果:
这里就可以看到我们在死循环的打印hehe!
✒️ 深度解析为什么会死循环 (nice公司的笔试题)
**这时就要用到我们调试里面的内存功能了,其实这里 **
笔试题
** 为什么死循环的原因很简单,我们前面说过临时变量是存在 **
栈区
** 的,而 **
栈区
** 的使用习惯是;**
- 先使用高地址的空间在使用地地址的空间
- 所以变量
i
就在数组上面一点创建的- 那么我们就可以画这样一幅图
🔥 注:栈区的讲解在《C/C++的内存分布》有过详细讲解大家可以去看看!
💻 观察内存
我们这里就可以调试一下,观察临时变量 i 和临时变量 arr 是不是在栈区是这样存储的!
这里为了观察方便就把数组初始化的时候先放上值!
- 取地址 i 得到的地址是 0x00A6FBC0
- 取地址arr 得到的地址是 0x00A6FBF0
**这里就可以看到我们临时变量 **
arr
** 和 **
i
** 在内存 栈区中地区是这样存储的!当我们循环第13次时 **
arr[13]
** 越界!**
- 就会找到我们临时变量
i
的地址值处从而 - 改为
0
开始无限循环
🔥 总结:所以我们在使用数组时一定要注意数组越界这个问题,不然就会引发bug。
💬如何写出好(易于调试)的代码
💭 优秀的代码:
- 代码运行正常
- bug很少
- 效率高
- 可读性高
- 可维护性高
- 注释清晰
- 文档齐全
💬编程常见的错误
💭 编程常见的错误:
直接看错误提示信息(双击),解决问题。或者凭借经验就可以搞定。相对来说简单。
- 通俗的讲就编译器下面的提示
💭 编译型错误
💭 链接型错误
看错误提示信息,主要在代码中找到错误信息中的标识符,然后定位问题所在。一般是标识符名不存在或者拼写错误。
- 这里就是链接型错误,一般程序会直接提示
💭 运行时错误
这个就属于我们上面的 (nice公司的笔试题)为什么会无限循环这个就属于运行错误!
📝全篇总结
✅ 归纳:
☁️ 好了以上就是关于调试给大家演示的调试实例,大家看完了也要用起来啊!只有用起来才知道自己掌握了没!
**看到这里了还不给博主扣个:
⛳️
点赞
☀️
收藏
⭐️
关注
!**
💛 💙 💜 ❤️ 💚💓 💗 💕 💞 💘 💖
拜托拜托这个真的很重要!
你们的点赞就是博主更新最大的动力!
有问题可以评论或者私信呢秒回哦。
版权归原作者 鸽芷咕 所有, 如有侵权,请联系我们删除。