当前位置: 首页 > news >正文

【C语言】——调试技巧

目录

​编辑

①前言

 1.什么是Bug?

2.什么是调试? 

2.1调试的基本步骤 

2.2Release与Debug

3.常用快捷键 

4.如何写出好的代码

4.1常见的coding技巧  

👉assert() 

 👉const() 

const修饰指针:


 

前言

  调试是每个程序员都必备的技能之一,调试能在程序逐步运行过程中锁定目标变量,找出问题,解决问题

一般把程序中的运行出现的问题称为 "Bug" ,Bug是程序员一生之敌

 1.什么是Bug?

Bug: 可以称之为“臭虫",现在指的是漏洞,就是在安全系统上出现缺陷,攻击者可以对未授权的情况下进行攻击,Bug(计算机漏洞) 可以形容在各个领域范围之内所出现的漏洞

 

👆第一次被发现的导致计算机错误的飞蛾,也是第一个计算机程序错误。 

2.什么是调试? 

调试:英文DeBug,又称作是除错,是发现和减少计算机程序设备中和电子仪器错误的过程。

调试其实就是找出bug,计算机有bug一定是程序的问题。

我们的调试环境:VS2019,当然VS系列方法都大同小异,掌握核心方法就行了。 

2.1调试的基本步骤 

✌发现程序错误的存在

✌以隔离、消除等方式对错误进行定位

✌确定错误产生的原因

✌提出纠正错误的解决办法

✌对程序错误予以改正,重新测试 

2.2Release与Debug

Release:

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

Debug:

调试版本,是程序员使用的开发版本,不作任何优化,便于程序员调试程序,是可以进行调试的(包含了相应的调试信息)。

 

👇这段代码在Debug和Release模式下产生不同效果 

Debug:死循环打印;

Release:打印13行;

int main()
{int i = 0;int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };for (i = 0; i <= 12; i++){printf("Who Say!!!\n");arr[i] = 0;}return 0;
}

3.常用快捷键 

 ✌( •̀ ω •́ )✌最常使用的几个快捷键:

F5 启动调试:

经常用来直接跳到下一个断点处。

F9 创建断点和取消断点:

断点的重要作用,可以在程序的任意位置设置断点。 这样就可以使得程序在想要的位置随意停止执行,继而一步步执行下去。

F10 逐过程:

通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句。

F11 逐语句:

就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑进入函数内部(这是最 长用的)。

CTRL + F5 :

开始执行不调试,如果你想让程序直接运行起来而不调试就可以直接使用。

F5和F9都是搭配使用的。

初学者掌握调试的内容可以达到事半功倍的效果,多多使用调试可以提高程序执行代码的效率。

4.如何写出好的代码

✌( •̀ ω •́ ):  代码整洁且规范

✌( •̀ ω •́ ):  注释清晰,且通俗易懂(代指写代码的人)

✌( •̀ ω •́ ):  可读性,有效性,可维护性

✌( •̀ ω •́ ):  bug尽量能够达到自己能够预期的范围之内,就是bug少,或者几乎没有bug

                        文档齐全,不乱去堆放 

4.1常见的coding技巧  

👉:养成良好的编码风格
👉:注释必要的还是要去添加,提高代码的可读性
👉:避免编码的陷阱
👉:尽量使用const
👉:使用assert,头文件#include<assert.h>,在assert();里面的表达式如果为真的话,assert表达式为真就什么都不会发生;

如果assert的表达式为假,那么就会报错

👉assert() 

是一个宏,不是函数

assert();括号里面放一个表达式

#include<assert.h>
void sort(const char* str)
{//assert(str!=NULL);assert(str);  //如果是空指针,表示为0,0是假;
}

 👉const() 

将变量转成常量

但并不是真正的变成常量,只是语法形式变成常量;本质上还是变量,

counst 修饰的变量不能再被改变;

const修饰指针:

修饰指针有两种方法

1. counst int* p ;

2. int * counst p;

  • const 放在的左边

限制的指针指向的内容,也就是说: 不能通过指针来修改指针指向的内容

但是指针变量是可以修改的,也就是指针指向其他变量的

  • const 放在的右边

限制的是指针变量本身,指针变量不能再指向其他对象

但是可以通过指针变量来修改指向的内容

int main() {const int num = 10;printf("num = d\n", num);//const 放在*的左边const int* p = &num;*p = 20;                //errint n = 100;p = &n;    //okprintf("num = d\n", num);return 0;
}
int main() {const int num = 10;printf("num = d\n", num);//const 放在*的右边边int* const p = &num;*p = 20;                //OKint n = 100;p = &n;    //errprintf("num = d\n", num);return 0;
}

 以上就是我对【C语言】调试技巧的介绍,文中不足的地方请指点!感激不尽!!!

 

http://www.lryc.cn/news/156213.html

相关文章:

  • 【Python】pytorch,CUDA是否可用,查看显卡显存剩余容量
  • React16入门到入土
  • 【GPT引领前沿】GPT4技术与AI绘图
  • 【LeetCode】19. 删除链表的倒数第 N 个结点
  • spring boot3.x集成swagger出现Type javax.servlet.http.HttpServletRequest not present
  • 《低代码指南》——智能化低代码开发实践案例
  • 268_C++_字节计算(((bits) + 7) / 8)、字节对齐(((number) + 3) / 4 * 4)
  • JavaWeb知识梳理(后端部分)
  • AI:07-基于卷积神经网络的海洋生物的识别
  • centos7下docker设置新的下载镜像源并调整存放docker下载镜像的仓库位置
  • Gitea--私有git服务器搭建详细教程
  • SOLIDWORKS放样是什么意思?
  • Xcode打包ipa文件,查看app包内文件
  • AJAX学习笔记6 JQuery对AJAX进行封装
  • 阿里云服务器退款规则_退款政策全解析
  • ExpressLRS开源之基本调试数据含义
  • DOM 简介 | 深入了解DOM
  • 机器学习丨2. 线性回归(Linear Regression)
  • python+django企业员工考勤打卡信息管理系统66lgr
  • 【Java Web】论坛帖子添加评论
  • 如何建设一个安全运营中心(SOC)?
  • 如何以Base64形式存储、返回图片数据
  • 【大模型】自动化问答生成:使用GPT-3.5将文档转化为问答对
  • 普通平衡树 Splay
  • 复旦-华盛顿EMBA:走近亿咖通科技,探寻汽车智能化的科创“密码”
  • 学习心得07:C#
  • importlib的使用、9个视图子类、视图集、drf之路由、drf之请求响应回顾、GenericViewSet相关流程图
  • 国际站阿里云服务器远程桌面密码错误怎么办?苹果手机如何远程登录?
  • CRMEB多端多语言系统文件上传0Day代审历程
  • 孙哥Spring源码第18集