【C语言】——调试技巧

news2024/11/26 11:26:02

目录

​编辑

①前言

 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;                //err
	int n = 100;
	p = &n;    //ok
	printf("num = d\n", num);
	return 0;
}
int main() {
	const int num = 10;
	printf("num = d\n", num);
	//const 放在*的右边边
	 int* const p = &num;
	*p = 20;                //OK
	int n = 100;
	p = &n;    //err
	printf("num = d\n", num);
	return 0;
}
	

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

 

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

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

相关文章

计及电池储能寿命损耗的微电网经济调度(matlab代码)

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序参考文献《考虑寿命损耗的微网电池储能容量优化配置》模型&#xff0c;以购售电成本、燃料成本和储能寿命损耗成本三者之和为目标函数&#xff0c;创新考虑储能寿命损耗约束、放电深度约束和储能循环次…

光电耦合器市场在预测期内预计将以8.99%的复合年增长率增长!

光耦合器是一种用于传输光信号的电子器件。它具有以下特性&#xff1a; 1. 传输性能&#xff1a;光耦合器能够实现光电转化和信号传输&#xff0c;具有良好的传输性能和抗干扰能力&#xff0c;可以避免外部环境的干扰。 2. 隔离性能&#xff1a;光耦合器能够实现电路之间的隔…

hive 基础知识

一 hive 是什么 在本节前我们需要明确 hive 是什么 上面两个代码块&#xff0c;左边的是 mapreduce 的代码块&#xff0c;右边的是hive 的代码块 很容易看出来&#xff0c;右边的 hive 写起来要更容易更快些&#xff0c;而执行效率&#xff0c;右边的 hive 只比左边多一个翻译…

Databend 开源周报第 109 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 利用 Cluster …

Python3学习第十二章 图形用户界面

#!usr/bin/env python # -*- coding:utf-8 _*- """ author:AIvision file: lecture12.py time: 2023/09/05 """ # 第十二章 图形用户界面 # 12.1 创建 GUI 示例应用程序 # 为演示Tkinter的用法&#xff0c;我将介绍如何创建一个简单的GUI应…

Java集合面试

文章目录 Java集合框架说说有哪些常见的集合&#xff1f;ArrayList和LinkedList的区别&#xff1f;HashMap的数据结构&#xff1f;把你了解的所有都讲一讲&#xff1f;数据结构&#xff1a; put流程Hashmap的resize方法的执行过程&#xff1f;get流程JDK8 HashMap为什么引入红黑…

数据库事务概述

1.1 存储引擎支持情况 SHOW ENGINES 命令来查看当前 MySQL 支持的存储引擎都有哪些&#xff0c;以及这些存储引擎是否支持事务。 能看出在 MySQL 中&#xff0c;只有 InnoDB 是支持事务的。 1.2 基本概念 事务&#xff1a; 一组逻辑操作单元&#xff0c;使数据从一种状态…

4.5V 至 23V、TAS2781RYYR音频放大器、QPF4617TR13 Wi-Fi® 6E非线性前端模块和DRV2667RGPR全集成压电式触觉驱动器

一、TAS2781RYYR&#xff0c;具有集成式音频处理和扬声器保护的 25W、4.5V 至 23V 数字输入 D 类放大器 介绍&#xff1a;TAS2781 是一款单声道、数字输入 D 类音频放大器&#xff0c;专为将高峰值功率高效率驱动到扬声器进行了优化。D类放大器在 18V 电源电压下可向 4Ω 负载…

SpringMVC_异常统一处理

3.全局统一异常处理 3.1目前存在问题 模拟后台出现服务器异常 GetMappingpublic ResultResp list(RequestParam(required false) String name){System.out.println(1/0);List<Item> ret service.lists(name);return ResultResp.success(retnull?Code.PAGE_FAIL:Code.…

JVM快速入门篇

一、JVM探究 1.1前言 请你谈谈你对jvm的理解&#xff1f;Java8虚拟机和之前的变化更新&#xff1f;什么是OOM&#xff1f;什么是栈溢出StackOverFlowError&#xff1f;怎么分析&#xff1f;jvm的常见调优参数有哪些&#xff1f;内存快照如何抓取&#xff1f;怎么分析Dump文件&…

RichView Text Box Items 文本框

RichView Text Box Items 文本框 RichView的文本框&#xff08;Text Box&#xff09;&#xff0c;是TRichView文档中的ITEM之一。 通常文本框项目&#xff08;Text Box Item&#xff09;是旁注的简化版本&#xff0c;该项目插入的位置没有可见的文本。 如果rvoShowSpecialChara…

【数学建模竞赛】数据预处理知识总结1——数据清洗

数据预处理是什么 在数学建模赛题中&#xff0c;官方给所有参赛选手的数据可能受到主观或客观条件的影响有一定的问题&#xff0c;如果不进行数据的处理而直接使用的话可能对最终的结果造成一定的影响&#xff0c;因此为了保证数据的真实性和建模结果的可靠性&#xff0c;需要…

中频炉冷循环监测终端,智能化管理冷却系统的新利器!

在现代工业生产中&#xff0c;中频炉是一种广泛应用于金属加工和熔化的设备。 一、中频炉的降温剂 中频炉的使用中&#xff0c;企业往往关注的是中频炉晶闸管、电抗器、电容器、汇流排以及中频炉线圈&#xff0c;忽观中频炉的冷却水。中频炉的冷却水在中频炉、中频加热炉使用…

ICC2:partial blockage array脚本

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 用法是先在玩加partial blockage array的地方create一个blockage,然后选中source这个脚本。需要定义三个值,分别是blockage的百分比,还有每个组成阵列的每个blockage宽和高。 addHBlkForSpecAre…

【以太网硬件二十一】USXGMII是什么?-Part2

&#x1f449;个人主页&#xff1a; highman110 &#x1f449;作者简介&#xff1a;一名硬件工程师&#xff0c;持续学习&#xff0c;不断记录&#xff0c;保持思考&#xff0c;输出干货内容 目录 PCS功能细节 XGMII到USXGMII的映射 带内配置和状态信号 自协商相关 电气特…

如何修复老照片?老照片修复翻新的方法

老旧照片&#xff0c;尤其是黑白照片&#xff0c;往往因为年代久远、保存方式不当等原因而出现褪色、污损、划痕等问题&#xff0c;会比较难以修复&#xff0c;就算是技术精湛的专业修复师&#xff0c;也是需要投入极大时间精力的&#xff0c;效果也是不可预料的。 修复老照片…

YOLOv5添加注意力机制

添加SE注意力机制 第一步 添加代码-SE类-models/common.py第二步 添加注意力关键词-models/yolo.py第三步 创建配置文件-models/yolov5s_SE.yaml第四步 修改读取配置-train.py 第一步 添加代码-SE类-models/common.py 进入models/common.py文件&#xff0c;这个文件里面包含了…

直线导轨的替换方法

目前&#xff0c;直线导轨的使用率持续上升&#xff0c;已广泛应用在各种各样的行业中&#xff0c;可替换性高是其广泛使用的重要原因之一&#xff01;直线导轨的替换指的就是导轨和滑块可以单出&#xff0c;不用整套替换。 市面上使用率最高的直线导轨品牌应该就是台湾*银了&a…

利用python进行视频下载并界面播放快速下载素材

工具&#xff1a;python designer&#xff08;python自带&#xff09;:UI界面设计工具 VLC&#xff1a;视频播放工具 需要的库如下&#xff1a; import os,platform os.environ[PYTHON_VLC_MODULE_PATH] "./vlc-3.0.14" import vlc from 脚本 import Player from …

Effective Java(中文版第3版)第2条:遇到多个构造器参数时要考虑使用构建器

Effective Java&#xff08;中文版第3版&#xff09;第2条&#xff1a;遇到多个构造器参数时要考虑使用构建器