第十章:C语言的调试

news2024/10/6 22:18:52

        很多小伙伴刚开始听到C语言的调试,这是个啥,表示很怀疑,敲代码不就是直接就是干嘛,结果很多小白们,一运行错误多的数都数不过来。就开始这改改,那删删,莫名奇妙就运行成功了。到最后都不知道到底那错了。有一种小朋友是否有多问号的感觉。可想而知代码调试有多么重要,一个正真的大佬,20%在敲代码,80%在调试代码。咱们不扯别的,直接进入今天的主题--C语言调试

 

 一:bug

 

 

      在 Mark II 计算机上工作时电脑不能正常运作了,霍普和整个团队都搞不清楚为什么。后来才发现,是一只飞蛾意外飞入了一台电脑内部而引起的故障。终于把问题解除了,霍普在日记本中记录下了这一事件。

二:调试的重要性

 ①调试的步骤

1.发现程序错误的存

2.以隔离、消除等方式对错误进行定位
3.确定错误产生的原因
4.提出纠正错误的解决办法
5.对程序错误予以改正,重新测试

②Debug和Release的介绍

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

三:Windows环境调试介绍

①准备调试(要在Debug环境下才可以调试)

 ②学会快捷键

• F5:启动调试,经常用来直接跳到下一个断点处。(在循环中跳到逻辑上的断点)

• F9:创建断点和取消断点。

      断点的重要作用,可以在程序的任意位置设置断点。

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

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

• F11:逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑

      进入函数内部(这是最常用的)。

• CTRL+F5:开始执行不调试。

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

1.查看临时变量的值

2.查看内存信息 

 3.查看调用堆栈

 四:编程常见的错误

1编译型错误
2链接型错误(无法解析的外部命令)
3运行时错误逻移出现问题

五:采用相关代码来减少bug

1.const关键字(const的作用可以避免无意中由于修改数据造成的编程错误。)

2.const修饰指针变量的作用

 3.例子(模拟实现库函数:strcpy)

//模拟实现库函数:strcpy
#include<stdio.h>
#include<assert.h>

char* my_strcpy(char* dest, const char * src)
{
	char* ret = dest;
	assert(dest != NULL);//断言防止空指针
	assert( src != NULL);//断言防止空指针
	//1.第一种写法
	//while (*dest++ = *src++) 
	//	;
	//2.第二种写法
	while (*src != '\0')
	{
		*dest = *src;
		dest++;
		src++;
	}
	*dest = *src;// \0 的拷贝
	return ret;
}


int main()
{
	//初始化
	char arr1[] = "hello bit"; 
	char arr2[20] = "xxxxxxxxxxxxx";
	char* p = NULL;
	//调用函数
	my_strcpy(arr2, arr1);
	//打印arr2
	printf("%s\n", my_strcpy(arr2, arr1));
	return 0;
}

        不知不觉就到了尾声呢,咱们第十章的知识点就到这里了啦,作为小白的我,可能写的不是很好,不对的地方还请大佬大佬指点指点。
 

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

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

相关文章

WEB自动化测试,一定得掌握的8个核心知识点

​ 编辑 写在前面 使用 cypress 进行端对端测试&#xff0c;和其他的一些框架有一个显著不同的地方&#xff0c;它使用 JavaScript 作为编程语言。 传统主流的 selenium 框架是支持多语言的&#xff0c;大多数 QA 会的 python 和 Java 语言都可以编写 selenium 代码&#xff0…

Android逆向之雷速体育(360加固)

本教程仅限于学术探讨&#xff0c;也没有专门针对某个网站而编写&#xff0c;禁止用于非法用途、商业活动等&#xff0c;否则后果自负。如有侵权&#xff0c;请告知删除&#xff0c;谢谢&#xff01; 目录 一、攻克难点 二、分析接口 三、结束 一、攻克难点 本期app难点&am…

2023远程控制软件排行榜

对远程控制软件的排名可能是主观的&#xff0c;因为它取决于个人的需求和偏好。 但是&#xff0c;这里列出了因其功能和性能而广受认可的流行远程控制软件&#xff1a; TeamViewer TeamViewer 是一款成熟的远程控制软件&#xff0c;以其易用性和广泛的功能而闻名。 它支持远程…

君子签电子签章助推企业实现印章“集中统一管控”和“分级分权管理”

对于中大型企业来说&#xff0c;印章管理一直以来都是个“老大难”问题。 在中大型企业&#xff0c;印章数量多&#xff0c;大多分散在各个分/子公司的各个部门&#xff0c;企业印章无法统一进行有效管理。印章分散各地&#xff0c;异地分/子公司跨区域盖章难&#xff1b;分/子…

java servlet 二手物品交易平台Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 java servlet 二手物品交易平台是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助 系统采用 serlvetdaobean 模式开发 &#xff0c;系统具有完整的源代码和数据 库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,My…

Allure在本地不安装allure服务的情况下打开Allure Html报告

前言 我们使用pytestallure生成Allure测试报告后&#xff0c;需要发给领导查看报告的详细信息。此时我们通过将allure生成的html报告压缩成压缩包后发送给领导&#xff0c;但是领导电脑由于没有安装Allure服务&#xff0c;打开会全部显示“Loading”&#xff0c; 无法查看到报…

信创办公–基于WPS的PPT最佳实践系列 (插入表格或图标)

信创办公–基于WPS的PPT最佳实践系列 &#xff08;插入图表或图标&#xff09; 目录 项目背景操作步骤1、插入表格2、实现放映功能 项目背景 当表格数据过大时&#xff0c;将其复制粘贴到PPT上时会显得插入的表格内容小、拥挤&#xff0c;使PPT看起来不美观。这个问题我们可以…

《微服务实战》 第十七章 Redis下载与安装

前言 Redis 全称 Remote Dictionary Server(即远程字典服务),它是一个基于内存实现的键值型非关系(NoSQL)数据库,由意大利人 Salvatore Sanfilippo 使用 C 语言编写。 与 SQL 型数据库截然不同,Redis 没有提供新建数据库的操作,因为它自带了 16 (0—15)个数据库(默…

牛客 BM76 正则表达式匹配 【动态规划】

描述 请实现一个函数用来匹配包括.和*的正则表达式。 1.模式中的字符.表示任意一个字符 2.模式中的字符*表示它前面的字符可以出现任意次&#xff08;包含0次&#xff09;。 在本题中&#xff0c;匹配是指字符串的所有字符匹配整个模式。例如&#xff0c;字符串"aaa"…

可算是熬出头了,测试6年,费时8个月,入职阿里,涨薪14K

前言 你的努力&#xff0c;终将成就无可替代的自己。 本科毕业后就一直从事测试的工作&#xff0c;和多数人一样&#xff0c;最开始从事点点点的工作&#xff0c;看着自己的同学一步一步往上走&#xff0c;自己还是在原地踏步&#xff0c;说实话这不是自己想要的状态。 一年半…

GPT_academic详细使用介绍与配置—可润色,翻译,解释代码(GPT助力学术,借助New Bing可实现免费使用)

&#x1f951; Welcome to Aedream同学 s blog! &#x1f951; 文章目录 绪论进入项目地址下载并解压到本地配置python3.11版本的虚拟环境安装运行所需的依赖库配置config配置代理文件配置GPT的api&#xff08;可选&#xff0c;按token计费&#xff09;配置NewBing的cookie&…

课程表 II:拓扑i排序

Problem: 210. 课程表 II 文章目录 思路解题方法1&#xff1a;首先新建一个inDegree数组用来存放所有的点的入度&#xff1a;int[] inDegree new int[numCourses];2&#xff1a;然后遍历所有子数组将所有点及其入度存进去&#xff0c;这道题就是课程号本身为坐标&#xff0c;对…

ASEMI代理长电可控硅PCR606:性能特点与应用领域

编辑-Z 可控硅&#xff08;Thyristor&#xff09;是一种半导体器件&#xff0c;具有高功率、高效率、高可靠性等优点。PCR606是一款常用的可控硅型号&#xff0c;广泛应用于各种电子设备中。本文将详细介绍PCR606的性能特点、工作原理以及在各个领域的应用。 一、PCR606性能特…

【算法学习系列】06 - 利用二分法查找有序数组中的某个数 num

文章目录 二分法说明实现 二分法验证实现暴力算法对数器使用验证结果 二分法 说明 二分法是一种常用的算法&#xff0c;也称为折半查找或二分查找。它适用于已经有序的数组中&#xff0c;通过将数组从中间划分成两个部分&#xff0c;每次根据目标值与中间值的大小比较来确定下…

基于InVEST模型的人类活动、重大工程生态成效评估、论文写作

查看原文>>>基于生态系统服务&#xff08;InVEST模型&#xff09;的人类活动、重大工程生态成效评估、论文写作 【学习目标】&#xff1a; 1) 采用InVEST模型&#xff0c;掌握产水&#xff08;包括水源涵养&#xff09;、碳存储&#xff08;包括固碳&#xff09;、土…

2023年最新苹果账号更改/注册为美区账号及免国外支付购买和充值美区App Store礼品卡教程

平时大家在使用IPhone手机时,应该有遇到软件明明是在App Store里上架的,但自己无论如何也搜索不到的情况吧!这种就是因为应用没有上架到你苹果账号所在的国家地区才导致的搜不到无法下载。比如:部分的新闻类、代[过滤]理类、游戏类应用以及Chat GPT等都无法在国区账号中搜索…

基于GPS+IMU的卡尔曼滤波融合定位算法MATLAB代码

资源地址&#xff1a; 基于GPSIMU的卡尔曼滤波融合定位算法MATLAB代码资源-CSDN文库 主要内容&#xff1a; 基于GPSIMU的卡尔曼滤波融合定位算法仿真,其中惯导用来进行状态预测,GPS用来滤波矫正&#xff0c;用于GPSIMU的卡尔曼滤波融合定位算法算法编程学习&#xff01;&…

如何以零停机时间或最少停机时间更新 Docker 容器,来确保应用程序持续可用

在现代应用程序开发和部署中&#xff0c;容器化技术已经成为一种常见的选择。Docker 容器的优势在于其轻量级、可移植性和可扩展性&#xff0c;但在更新容器时可能会面临停机时间的问题。本文将详细介绍如何以零停机时间或最少停机时间更新 Docker 容器&#xff0c;以确保应用程…

RedisTemplate

jedis是redis官网推荐的一个面向java客服端&#xff0c;库文件实现了对各类API进行封装调用。 lettuce是一个redis的驱动包&#xff0c;Lettuce译为生菜。 jedis和lettuce都是redis的客户端&#xff0c;他们可以连接redis服务器.但是在springbot2.0以后都是使用的Lettuce客户…

ImageCombiner是一个专门用于Java服务端图片合成的工具

1.1 项目背景 最近公司上了不少传播方面的需求&#xff0c;免不了合成各种营销图片&#xff0c;图片合成本身并不是什么高深的技术&#xff0c;但用底层api去搞确实繁琐&#xff0c;于是抽时间封装了一个小工具&#xff0c;初衷是解放生产力&#xff0c;后来发现挺好使&#x…