【C语言】实用调试技巧

news2024/11/15 5:54:14

目录

1.什么是bug?

2. 调试是什么?有多重要?

2.1 调试是什么?

2.2 调试的基本步骤 

2.3 Debug和Release的介绍

3. Windows环境调试介绍 

3.1 调试环境的准备 

3.2 学会快捷键 

3.3 调试的时候查看程序当前信息 

3.3.1 查看临时变量的值

3.3.2 查看内存信息

3.3.3 查看调用堆栈 

3.3.4 查看汇编信息  

3.3.5 查看寄存器信息 

4.多多动手,尝试调试,才能有进步。  

5. 如何写出好(易于调试)的代码。

优秀的代码:


1.什么是bug?

Grace Hopper在1947年在MarkII机器运行程序时发现的第一个程序“bug”,被贴在她的本子上了。
它真的是个虫子。这只夹扁的小飞蛾在MarkⅡ计算机的继电器触点里,它“卡”住了机器的运行,导致运行出错。

 

2. 调试是什么?有多重要?

所有发生的事情都一定有迹可循,如果问心无愧,就不需要掩盖也就没有迹象了,如果问心有愧, 就必然需要掩盖,那就一定会有迹象,迹象越多就越容易顺藤而上,这就是推理的途径。
拒绝-迷信式调试!!!!

2.1 调试是什么?

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

2.2 调试的基本步骤 

  • 发现程序错误的存在
  • 以隔离、消除等方式对错误进行定位
  • 确定错误产生的原因
  • 提出纠正错误的解决办法
  • 对程序错误予以改正,重新测试

2.3 DebugRelease的介绍

Debug 通常称为调试版本 ,它包含调试信息,并且不作任何优化,便于程序员调试程序。
Release 称为发布版本 ,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。

我们说调试就是在Debug版本的环境中,找代码中潜伏的问题的一个过程。

那编译器进行了哪些优化呢?
请看如下代码:
#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 模式去编译,程序没有死循环。
那他们之间有什么区别呢?
就是因为优化导致的.

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

3. Windows环境调试介绍 

 注:linux开发环境调试工具是gdb,后期博客会介绍

3.1 调试环境的准备 

 在环境中选择 debug 选项,才能使代码正常调试。

3.2 学会快捷键 

 最常使用的几个快捷键:

F5: 启动调试,经常用来直接跳到下一个断点处
F9: 创建断点和取消断点, 断点 的重要作用,可以在程序的任意位置设置断点。 这样就可以使得程序在想要的位置随意停止执行,继而一步步执行下去
F10: 逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句。
F11:
逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑 进入函数内部 (这是最长用的)。

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

3.3 调试的时候查看程序当前信息 

3.3.1 查看临时变量的值

在调试开始之后,用于观察变量的值。

 

3.3.2 查看内存信息

在调试开始之后,用于观察内存信息。

3.3.3 查看调用堆栈 

通过调用堆栈,可以清晰的反应函数的调用关系以及当前调用所处的位置。 

3.3.4 查看汇编信息  

可以切换到汇编代码。 

3.3.5 查看寄存器信息 

可以查看当前运行环境的寄存器的使用信息 

4.多多动手,尝试调试,才能有进步。  

  • 一定要熟练掌握调试技巧。
  • 初学者可能80%的时间在写代码,20%的时间在调试。但是一个程序员可能20%的时间在写程序,但是80%的时间在调试。
  • 我们所讲的都是一些简单的调试。 以后可能会出现很复杂调试场景:多线程程序的调试等。
  • 多多使用快捷键,提升效率

5. 如何写出好(易于调试)的代码。

优秀的代码:

1. 代码运行正常
2. bug 很少
3. 效率高
4. 可读性高
5. 可维护性高
6. 注释清晰
7. 文档齐全

常见的coding技巧:

1. 使用 assert     //断言
2. 尽量使用 const
3. 养成良好的编码风格
4. 添加必要的注释
5. 避免编码的陷阱。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/97394.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用ssd1306驱动,来驱动0.96寸中景园oled屏幕

硬件 nucleo-f411RE, 中景园oled屏幕(0.96寸&#xff0c;七线) 驱动文件地址 stm32-ssd1306 驱动文件说明 使用的库&#xff1a;HALHALHAL 支持的通信协议&#xff1a;SPI/IICSPI/IICSPI/IIC 文件结构&#xff1a; 其中&#xff0c;驱动文件在ssd1306ssd1306ssd1306文件中…

LeetCode题解 二叉树(四):我要打十个?层序遍历变式九道

前言&#xff1a; 本篇涉及的题目都与10 二叉树的层序遍历有关&#xff0c;共九道题 107.二叉树的层次遍历II medium199.二叉树的右视图 medium637.二叉树的层平均值 easy429.N叉树的前序遍历 medium515.在每个树行中找最大值 medium116.填充每个节点的下一个右侧节点指针 me…

机器学习——详解判别模型求解分类问题

目录 逻辑回归 判别模型(discriminative model) 设计模型Function set设计函数选择最好的w和b更新参数w和b 逻辑回归与线性回归对比 逻辑回归为什么用交叉熵来找最优的参数而不用MAE或MSE GM与DM区别 多维分类——以三类别为例 GM 生成模型DM 判别模型 输入特征处理→深度学习…

财务人员学Python有用吗?

财务人员学Python有用吗&#xff1f;作为财务人员每天面对大量的数据&#xff0c;财务人员用Python做小工具&#xff0c;录单审凭证不到1分钟就搞定了。把更多的时间花在财务分析上&#xff0c;更好更快地完成工作。 Python作为一门编程语言&#xff0c;属于IT技术自动化技术、…

Python:遗传算法最优路径

Hello&#xff0c;大家好&#xff01;读研前写过一篇遗传算法的代码&#xff0c;比较简单&#xff0c;算是个入门&#xff0c;当时就有想用它来解决最优路径的问题&#xff0c;上算法导论课时碰巧有听到同学有分享过&#xff0c;但由于自己研究的方向不是这块&#xff0c;就没有…

【LeetCode每日一题】——968.监控二叉树

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【时间频度】九【代码实现】十【提交结果】一【题目类别】 树 二【题目难度】 困难 三【题目编号】 968.监控二叉树 四【题目描述】 给定一个二叉树&…

入门:从虚拟机到容器

从虚拟机到容器 前面我们成功安装了Docker学习环境&#xff0c;以及浅尝了一下Docker为我们带来的应用快速部署。在正式进入学习之前&#xff0c;我们就先从Docker的发展开始说起。 在Docker出现之前&#xff0c;虚拟化技术可以说是占据了主导地位。首先我们来谈谈为什么会出现…

Adobe Pro DC 2022 软件详细安装教程

一、软件下载 网盘链接&#xff1a;Adobe Pro DC 2022 提取码:ib19 二、详细安装教程 1、解压安装包&#xff0c;右键安装程序Set-up&#xff0c;点击以管理员身份运行 2、更改软件安装位置&#xff0c;建议安装至除C盘外的其他盘&#xff08;如不需更改直接点击【继续】即可…

自学编程的朋友,我想给你们这 5 个建议

0基础学编程&#xff0c;我想给你这 5 个建议 很多人都想转行互联网&#xff0c;不管是出于兴趣、行业前景还是薪资的考虑&#xff0c;想要转行互联网的人们必须要面对一个问题&#xff0c;那就是如何自学编程&#xff0c;更确切的说&#xff0c;是如何0基础学编程。 其实我基…

小师弟:2022广东省工科赛分享(越障排爆省一,完整项目)

目录日常唠嗑前言一、实验效果二、赛题分析及方案1、赛题内容&#xff1a;初赛&#xff1a;决赛&#xff1a;2、实施方案&#xff1a;三、材料选择四、程序设计程序思路PID&#xff1a;越障部分&#xff1a;颜色识别部分&#xff1a;五、竞赛心得六、工程获取日常唠嗑 小师弟说…

J-002 Jetson电路设计之电源设计--NANO XAVIER NX

Jetson电源设计1 电源说明1.1 电源和系统引脚描述1.2 电源控制框图详情2 上电的时许2.1 框图分析2.2 上电时序3 GND引脚1 电源说明 Jetson NANO和XAVIER NX核心板的电源为DC-5V。 1.1 电源和系统引脚描述 PIN名称描述方向类型251-260VDD_IN主电源输入5.0V235PMIC_BBATRTC时钟…

深入剖析Linux RCU原理(二)-渐入佳境

说明&#xff1a; Kernel版本&#xff1a;4.14ARM64处理器&#xff0c;Contex-A53&#xff0c;双核使用工具&#xff1a;Source Insight 3.5&#xff0c; Visio 1. 概述 我会假设你已经看过了深入剖析Linux RCU原理&#xff08;一&#xff09;初窥门径 本文将进一步去探索下…

设计模式4 - 行为型模式

23种设计模式分析与见解开篇、UML、软件设计原则https://blog.csdn.net/lili40342/article/details/128358435创建型模式https://blog.csdn.net/lili40342/article/details/128358392结构型模式https://blog.csdn.net/lili40342/article/details/128358313行为型模式https://bl…

【GRU时序预测】基于matlab卷积神经网络结合门控循环单元CNN-GRU时间序列预测【含Matlab源码 2287期】

⛄一、CNN-GRU数据预测 1 理论基础 1.1 CNN算法 负荷序列数据为一维数据&#xff0c;用一维卷积核对数据进行卷积处理&#xff0c;以获取数据的特征。 现设定卷积核的维度为3&#xff0c;移动步长为1&#xff0c;对输入数据进行卷积&#xff0c;以获得特征图图谱&#xff0c;即…

转行AI产品经理的学习过程

学习内容及思考 引言 当别人问你为什么转行AI产品经理&#xff1f; 你回答因为自己喜欢。 这是一句多么空洞的话呀&#xff0c;苍白又无力&#xff0c;那你为什么喜欢呢&#xff1f;你了解他么&#xff1f;仅凭自己这一腔热情&#xff0c;一句轻描淡写的我喜欢&#xff0c;是…

行为树 --- [7] BehaviorTree.CPP 4.x版本的编译及使用

根据BehaviorTree.CPP的官方介绍&#xff0c;3.x版本已经不再维护了&#xff0c;建议使用4.x版本&#xff0c; 4.x版本和3.x版本的区别可以看这里 — https://www.behaviortree.dev/migration 本文介绍4.x版本的编译及使用&#xff0c;环境是Debian 10.5&#xff0c;编译器是…

笔试强训(四十七)

目录一、选择题二、编程题2.1 合唱团2.1.1 题目2.1.2 题解2.2 马戏团2.2.1 题目2.2.2 题解一、选择题 &#xff08;1&#xff09;对于IP地址130.63.160.2&#xff0c;MASK为255.255.255.0&#xff0c;子网号为&#xff08;B&#xff09; A.160.2 B.160 C.63.160 D.130.63.160 …

学Python好找工作吗?需要满足Python岗位哪些要求?

学Python好找工作吗&#xff1f;需要满足哪些要求&#xff1f;随着Python的火爆&#xff0c;国内Python的岗位也随之增多&#xff0c;只要技术能力强项目经验充足&#xff0c;找到工作不是问题。即使是一些二线城市&#xff0c;Python的薪资待遇也比较好。 一、学Python好找工作…

学习编程的中小学生越来越多,是盲目追风,还是确有其用?!

首先&#xff0c;中小学生为什么要学习编程?未来社会&#xff0c;随姜信息技术和人工智能的发展&#xff0c;越来越多行业的工作离不开编程。美国前总统奥巴马就呼吁:“如果我们想让美国保持地位&#xff0c;就需要年轻代的美国人掌握这种(编程)工具和技术,它将改变我们所有的…

最简单的canvas基础+实践,确定不进来看看嘛

前言 怎么突然提到 canvas 呢❓其实是因为工作中有一个小需求&#xff0c;就是给特定的区域做水印&#x1f624;&#xff0c;思来想去&#x1f60e;就选择使用 canvas 去做&#xff0c;简单效果如下&#xff1a; 实现思路&#x1f937;‍♂️&#xff1a;封装一个全局指令&am…