学习c语言第十四天(调试+练习)

news2024/9/20 18:30:11

一、调试

所有发生的事情都一定有迹可循,如果问心无愧,就不需要掩盖也就没有迹象了,如果问心有愧
就必然需要掩盖,那就一定会有迹象,迹象越多就越容易顺藤而上,这就是推理的途径。
顺着这条途径顺流而下就是犯罪,逆流而上,就是真相。

1.什么是调试

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

2.调试的基本步骤

发现程序错误的存在

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

确定错误产生的原因

提出纠正错误的解决办法

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

3.Debug和Release的介绍

Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。

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

二、windows环境调试

1.调试快捷键

F5        启动调试,经常用来直接跳到下一个断点处。
F9        创建断点和取消断点
            断点的重要作用,可以在程序的任意位置设置断点。
            这样就可以使得程序在想要的位置随意停止执行,继而一步步执行下去。

            右击断点可以设置断点触发条件
F10        逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句。
F11        逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑进入函数内部(这是最长用的)

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

2.调试时查看程序当前信息

查看临时变量的值

查看内存信息

查看调用堆栈

查看汇编信息

查看寄存器信息

三、调试的实例

1.求1!+2!+3!+4!+.......+n!//调试该代码

2.找出死循环的原因

栈区先使用高地址处的空间,在使用低地址处的空间

 四、写出易于调试的代码

要求

1.代码运行正常

2.bug很少

3.效率高

4. 可读性高

5.可维护性高

6.注释清晰
7.文档齐全

技巧

1.使用assert

2.尽量使用const

3.养成良好的编码风格

4.添加必要的注释

5.避免编码的陷阱。

模拟库函数strcpy

模拟strcpy

#include <stdio.h>
#include <assert.h>
//字符串拷贝
//strcpy再拷贝字符串的时候会把\0也拷贝过去
//strcpy返回的是目标空间的起始地址,加返回值可以实现链式访问
//void my_strcpy(char*arr1,char*arr2)
//{
//	while (*arr2)
//	{
//		*arr1 = *arr2;
//		arr1++;
//		arr2++;
//	}
//	*arr1 = *arr2;
//}//简单版本
char* my_strcpy(char* arr1, const char* arr2)//const 修饰arr2不能改变防止while()括号里内容顺序错误
{
	//断言,如果是空指针报错
	char* ret = arr1;
	assert(arr1!=NULL);
	assert(arr2 != NULL);
	while ( *arr1++= *arr2++  )
	{
		;
	}
	return ret;
}//牛逼版本
int main()
{
	char arr1[20] = {0};
	char arr2[] = "hello";
	/*my_strcpy(arr1,arr2);*/
	printf("%s\n",arr1);
	printf("%s", my_strcpy(arr1, arr2));
	return 0;
}

模拟strlen

//模拟strlen函数升级版
int my_strlen(const char*str)//不能改变数据
{
	int count = 0;
	assert(str);
	while (*str!='\0')
	{
		count++;
		str++;
	}
	return count;
}
int main()
{
	char arr[] = "hello word";
	int len = my_strlen(arr);
	printf("%d",len);
	return 0;
}

五、编程中常见的错误 

1.编译型错误(语法错误)

2.链接型错误(在链接阶段出现错误)-找不到符号

3.运行时错误(结果不是理想的)-调试解决

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

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

相关文章

广东省某地区智慧水务平台全面升级启航(案例解析)

项目背景 随着物联网、人工智能、大数据、数字孪生等技术的应用&#xff0c;对精准调控、漏损控制、可视化管理、节能降耗、高效指挥等方面的要求越来越高。鉴于此&#xff0c;广东某地区的现有智慧水务平台已无法满足日益增长的智能化管理需求&#xff0c;亟待进行智慧化升级以…

工程计算与分析课程报告-Matlab

如下图所示的单自由度系统: m20kg, c30 Ns/m, and k3000 N/m. 1、应用数学、机械等理论知识推导出以下系统的数学模型&#xff1a; 其中&#xff1a; x坐标如上图所示&#xff0c;取其稳态点为零点。 M为重物质量 K为弹簧弹性系数 C为阻尼系数 F(t)为施加在重物上的外激励…

应用层协议HTTP

应用层协议HTTP 注1. HTTP协议2. 认识URL3. HTTP 协议请求与响应格式3.1.快速获取HTTP请求3.2 快速解析HTTP请求3.3 细致了解HTTP请求与响应 4. 完善Http.hpp代码&#xff0c;实现http协议4.1 http请求4.2再谈URL4.3构建http应答4.4 Content-Type属性 5.HTTP请求/响应属性5.1HT…

vscode+git解决远程分支合并冲突

1&#xff09;远程分支和远程分支不复杂情况合并 例如readme的冲突 可直接在github上解决 删到只剩下 #supergenius002 合并冲突测试1/合并测试冲突1合并测试冲突2/合并测试冲突2就行 《《《/》》》也要删掉 2&#xff09;但如果是复杂的冲突&#xff0c;让我们回到vscod…

glsl shader中实现canvas中的createRadialGradient效果

在网上找了好久&#xff0c;也没有发现有现成用shader去实现canvas radialGradient效果的.大部分都是简单的只有一个中心圆或者通过canvas绘制渐变再作为纹理图像进行贴图&#xff0c;没有类似像canvas有内圆与外圆&#xff0c;两圆心位置不一样&#xff0c;可以用实现类似焦点…

【开发问题记录】启动某个微服务时无法连接到seata(seata启动或配置异常)

问题记录 一、问题描述1.1 问题复现1.1.1 将Linux中的部分微服务启动1.1.2 在本地启动当时出错的服务 1.2 解决思路1.2.1 Nacos中seata相关的信息1.2.2 Linux中seata相关的信息 二、问题解决2.1 seata的配置错误2.1.1 Nacos中seata的配置问题2.1.2 命名空间问题的发现 2.2 网络…

Python数值计算(12)

本篇说说Neville方法。Neville方法的基础是&#xff0c;插值多项式可以递归的生成&#xff0c;有时进行插值的目的是为了计算某个点的值&#xff0c;这个时候并不需要将拟合曲线完全求出&#xff0c;而是可以通过递归的方式进行计算&#xff0c;具体操作如下&#xff1a; 例如…

代码实践思考:ROS1和ROS2

扩展 能否借助人工智能工具将ROS1批量转为ROS2如何更高效的进行ROS学习 ROS1大量案例直接批处理用智能工具转为ROS2案例 不同版本之间的工具软件直接用智能方式进行代码升级 例如OpenCV之类&#xff0c;一些函数变化&#xff0c;直接用智能工具进行批量代码优化 机器人画圆-…

滞回比较器工作原理,应用,TINA仿真

滞回比较器 滞回比较器的主要应用是增加滞回控制&#xff0c;让其对微小的变化不那么敏感&#xff0c;增强抗干扰能力&#xff0c;避免由噪声引起的不稳定状态&#xff0c;通常用于噪声环境下的阈值检测以及信号调理。根据不同需求&#xff0c;滞回比较器还可以设计成开漏极输出…

超级智能体创造营:启动!我的情侣匹配度测试助手

零、写在前面 听说由百度文心智能体平台主办&#xff0c;万众瞩目的 超级智能体创造营 第三期启动啦&#xff01; 在本期的创造营中&#xff0c;博主开发了一款有趣的超级智能体&#xff1a;情侣匹配度测试助手。 为什么要开发它呢&#xff0c;快来听博主娓娓道来吧~ 一、超…

【通俗理解】自由意志与预测——混沌理论与预测的不可能性

【通俗理解】自由意志与预测——混沌理论与预测的不可能性 自由意志与预测的类比 你可以把自由意志比作一只难以捉摸的蝴蝶&#xff0c;它的每一次振翅都可能引发不可预测的风暴。而预测则像是一个试图捕捉这只蝴蝶的网&#xff0c;但往往因为蝴蝶的微小变动而错失目标。 自由意…

五大AI测试开源框架及使用方法介绍

AI测试框架是一套系统的测试工具和方法&#xff0c;包括测试的规范和基础代码&#xff0c;涵盖了一系列的测试思想和方法。这些框架可以帮助开发者和测试人员对AI模型进行测试&#xff0c;确保AI模型在真实世界的应用中能够达到预期的效果。接下来的内容&#xff0c;我们将介绍…

PHP苹果 V X iPhone微商i o s多分开V X语音转发密友朋友圈一键跟圈软件

苹果VX神器&#xff01;iPhone微商必备&#xff1a;ios多开、VX语音转发、密友朋友圈一键跟圈软件大揭秘&#xff01; 一、iOS多开新境界&#xff0c;工作生活两不误&#xff01; 你是不是也烦恼过&#xff0c;想要在工作号和生活号之间自由切换&#xff0c;却因为iPhone的限制…

【vue3】pinia配置(任意组件通信,集中状态管理容器)

选择式写法 一、安装pinia依赖 终端输入&#xff1a;npm install pinia 二、配置pinia 第一步&#xff1a;创建仓库&#xff0c;在src目录下创建文件夹modules和文件index.ts. 第二步&#xff1a;配置index.ts // 创建pinia大仓库 import { createPinia } from "pin…

H5+JS视频列表

源码在最后面 好像有些浏览器不适配&#xff08;可能是设置了禁用自动播放的功能&#xff09; 实现功能 视频自动无声播放鼠标置于某个视频板块之上时自动无声播放点击视频跳转视频链接 效果图&#xff08;部分 视频加载可能有点慢&#xff09; 部分功能实现原理 1.无声播放…

学习C语言第十六天(调试、)

调试 第一题 C 第二题 A 第三题 C 第四题 C 第五题 D release不可以调试 第六题 越界访问访问到了i的地址 编程题 模拟strcpy void my_strcpy(char*arr1,char*arr2) {while (*arr2){*arr1 *arr2;} } int main() {char arr1[50…

【足球走地软件】走地数据分析预测【大模型篇】走地预测软件实战分享

了解什么是走地数据&#xff1f; 走地数据分析&#xff0c;在足球赛事的上下文中&#xff0c;是一种针对正在进行中的比赛进行实时数据分析的方法。这种方法主要用于预测比赛中的某些结果或趋势&#xff0c;如总进球数、比分变化、球队表现等。 在足球走地数据分析中&#xf…

仕考网:公务员可以报考军队文职吗?

公务员可以报考军队文职考试&#xff0c;但是需要满足前提条件。 对于已经与国家、地方的用人单位建立劳动关系的社会人才&#xff0c;在获得当前用人单位的许可后才可以申请报考。 在面试过程中&#xff0c;考生必须出示一份由其用人单位出具的且加盖公章的同意报考证明。一…

C++: set容器

一、关联式容器 我们已经了解了STL中的部分容器&#xff0c;比如vector、list、deque等&#xff0c;这些容器被称为序列式容器&#xff0c;其底层为线性序列的数据结构&#xff0c;里面存储的是元素本身。 关联式容器也是用来存储数据的&#xff0c;与序列式容器不同&#xf…

Windows中启用Linux命令功能WSL,并安装Linux子系统

文章目录 一、WSL简介 二、启用WSL 三、参考文章 一、WSL简介 WSL&#xff08;Windows Subsystem for Linux&#xff0c;适用于 Linux 的 Windows 子系统&#xff09;允许用户直接在 Windows 上运行Linux 环境&#xff08;包括大多数命令行工具、实用程序和应用程序&#x…