C语言调试

目录

一.Debug和Release介绍

二.Windows环境调试介绍

三.窗口介绍

(1)自动窗口和局部变量窗口

(2)监视窗口

(3)调用堆栈

(4)查看汇编信息

(5)查看寄存器 

四.优秀的代码

五.练习实现strlen功能


一.Debug和Release介绍

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

Release称为发布版本,往往进行了各种优化,使得代码大小和运行速度上都是最优的,一边用户的使用,没有调试信息,得到的.exe文件大小比较小

直接就会将10个数打印出来

二.Windows环境调试介绍

ctrl+F5:编译-链接+生成可执行程序

按下F5后会一直执行程直到程序运行结束,通常与F9配合使用,进行调试

设置断点,不能跳过scanf(),必须进行完互动才可以跳到断点

注:

调试过程中尽量不要返回到上一步,因为结果会不准确

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

三.窗口介绍

(1)自动窗口和局部变量窗口

自动窗口只会显示一个函数内部的变量,跳到下一个函数,上一个函数内部的变量就消失了

 局部变量窗口也会有局部变量上下跳动,观察不方便

(2)监视窗口

输入什么就查看什么

注:

对于数组的查看

当在主函数时,可以输入数组名对全部元素进行查看

当进行传址调用时,输入数组名就只能查看第一个元素,但可以在数组名后加逗号再加数字, 进行多个元素的查看

(3)调用堆栈

(4)查看汇编信息

(5)查看寄存器 

可以在寄存器和监视窗口查看寄存器

调试演示

研究该代码死循环的原因

int main()
{

	int i = 0;
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	for (i = 0; i <= 12; i++)
	{
		arr[i] = 0;
		printf("明日小路");
	}

	return 0;
}

编译器一直在执行循环,可能并不会进行越界访问的报错 

但如果将定义的i变量放在数组后面进行定义,就可以避免死循环

四.优秀的代码

release版本会将assert()优化掉

const 关键字可以对指针进行相关的修饰

下面对于strcpy代码进行自定义和优化

#include <string.h>
void my_strcpy(char* dest, char* sour)
{
	while (*sour != '\0')
	{
		*dest = *sour;
		dest++;
		sour++;
	}
	*dest = *sour;
}
int main()
{
	char arr1[20] = "XXXXXXXXXXXXXXXXX";
	char arr2[] = "Komichi Akebi";
	my_strcpy(arr1, arr2);
	printf("%s", arr1);
	return 0;
}

优化后

#include <string.h>
#include <assert.h>
char* my_strcpy(char* dest, const char* sour)//加const 可以有效避免使用函数时将源字符和目标空间弄混
{
	char* ret = dest;

	assert(sour != NULL);
	assert(dest != NULL);
	while (*dest++ = *sour++);
	return ret;//返回值是目标空间的首元素地址,目的是实现链式访问
}
int main()
{
	char arr1[20] = "XXXXXXXXXXXXXXXXX";
	char arr2[] = "Komichi Akebi";
	printf("%s", my_strcpy(arr1, arr2));//函数具有返回值可以直接进行打印,可以实现链式访问
将一个函数的返回值作为另一个函数的参数
	return 0;
}

注:

对于常变量const

1.const的放在*左边

但是p变量本身的值是可以进行修改的 

2.const放在*右边

3.当在*的左边和右边都放上const ,则指针所指向的变量和指针本身都不能进行修改了

五.练习实现strlen功能

#include <assert.h>
int my_strlen(const char* str)//加const还是为确保str防止进行修改
{
	int count = 0;//记得对变量进行初始化
	assert(str);//进行断言,防止传入NULL
	while (*str++)
	{
		count++;
	}
	return count;
}
int main()
{
	char arr1[] = "Komichi Akebi";//定义数组的格式要写对,数组名后记得写[ ]
	int len = my_strlen(arr1);
	printf("%d", len);
	return 0;
}

问题:

1.不能对空指针NULL进行解引用操作

2.主函数里面数组在定义的时候,不需要加const,对于在传址的时候将指针用const进行修饰,只是将主函数中定义的一个不够安全的数组变得更加安全

编程常见的一些错误

C语言编译器在编译时会对代码进行修改,如将函数名前面加上下划线

链接错误不会找到对应的错误位置去

 后期有兴趣可以深入学习git

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux笔记之LD_LIBRARY_PATH详解

Linux笔记之LD_LIBRARY_PATH详解 文章目录 Linux笔记之LD_LIBRARY_PATH详解1.常见使用命令来设置动态链接库路径2.LD_LIBRARY_PATH详解设置 LD_LIBRARY_PATH举例注意事项 3.替代方案使用标准路径编译时指定链接路径优先使用 rpath 还是 runpath&#xff1f;注意事项 1.常见使用…

四信AI智能识别及计量监测设备,助力入河入海排污口规范化建设

随着城市化和工业化的快速发展&#xff0c;污水排放已成为主要的环境问题之一。2022年&#xff0c;国务院办公厅发布《关于加强入河入海排污口监督管理工作的实施意见》&#xff0c;提出“加强科技研发&#xff0c;开展各类遥感监测、水面航测、水下探测、管线排查等实用技术和…

Curator基本使用

文章目录 1. 基本操作1.1 建立连接1.2 创建结点1.3 查询结点查询数据查询子结点查看结点信息 1.4 修改结点普通修改带乐观锁的修改 1.5 删除删除单个结点删除带子结点的结点必须成功的删除带回调函数的删除 2. 监听器事件2.1 NodeCache单一结点连续监听2.2 PathChildrenCache监…

GEE入门篇|遥感专业术语(实践操作2):空间分辨率(Spatial Resolution)

目录 空间分辨率&#xff08;Spatial Resolution&#xff09; 1.MODIS&#xff08;搭载在Aqua 和 Terra 卫星上&#xff09; 2. TM&#xff08;搭载在早期LandSat卫星上&#xff09; 3.MSI&#xff08;搭载在在Sentinel-2 卫星上&#xff09; 4.NAIP 空间分辨率&#xff0…

基于qt的图书管理系统----03核心界面设计

参考b站&#xff1a;视频连接 源码github&#xff1a;github 目录 1 添加软件图标2 打包程序3 三个管理界面设计4 代码编写4.1 加载界面4.2 点击按钮切换界面4.3 组团添加样式4.4 搭建表头4.5 表格相关操作 从别人那里下载的项目会有这个文件&#xff0c;里边是别人配置的路径…

ETL:数据转换与集成的关键过程

ETL&#xff1a;数据转换与集成的关键过程 在现代数据驱动的世界中&#xff0c;有效地管理和处理数据对于企业的成功至关重要。ETL&#xff08;提取、转换、加载&#xff09;是一种关键的数据处理过程&#xff0c;有助于将数据从源系统提取、清洗、转换并加载到目标系统中&…

大蟒蛇(Python)笔记(总结,摘要,概括)——第9章 类

目录 9.1 创建和使用类 9.1.1 创建Dog类 9.1.2 根据类创建实例 9.2 使用类和实例 9.2.1 Car类 9.2.2 给属性指定默认值 9.2.3 修改属性的值 9.3 继承 9.3.1 子类的_init_()方法 9.3.2 给子类定义属性和方法 9.3.3 重写父类中的方法 9.3.4 将实例用作属性 9.3.5 模拟实物 9.…

Maven setting.xml 配置

目的&#xff1a;可以把我们书写的jar包发布到maven私有仓库&#xff0c;简称私仓 1. 打开云效 2.点击 非生产库-snapshot mave release仓库与snapshot仓库区别&#xff1f; 在软件开发中&#xff0c;"Maven release 仓库"和"Maven snapshot 仓库"是两种…

google浏览器chrome无法访问localhost等本地虚拟域名的解决方法

场景一&#xff1a; 谷歌浏览器访问出现&#xff1a;forbbiden 403 问题&#xff0c;或者直接跳转到正式域名(非本地虚拟域名) 访问本地的虚拟域名http://www.hd.com/phpinfo.php?p1发生了302 条状 火狐浏览器正常访问; 解决方法&#xff1a; 方法1&#xff1a;在谷歌浏览器…

8 buuctf解题

[BJDCTF2020]just_a_rar 1 下载&#xff0c;得到 发现有加密 使用ARCHPR设置四位数掩码爆破 得到口令2016&#xff0c;解压得到图片&#xff0c;flag在图片exif中 在备注里面看见了flag [HBNIS2018]excel破解 1 下载下来是attachment.xls 修改后缀为rar 使用010 Editor打开&a…

5G网络建设 - 华为OD统一考试(C卷)

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 200分 题解&#xff1a; Java / Python / C 题目描述 现需要在某城市进行5G网络建设&#xff0c;已经选取N个地点设置5G基站&#xff0c;编号固定为1到N&#xff0c; 接下来需要各个基站之间使用光纤进行连接以确保基…

基于Docker和Springboot两种方式安装与部署Camunda流程引擎

文章目录 前言1、Docker安装1.1、拉取Camunda BPM镜像1.2、编写docker启动camunda容器脚本1.3、docker启动脚本1.4、访问验证 2、SpringBoot启动2.1、下载地址2.2、创建SpringBoot项目并配置基础信息2.3、下载SpringBoot项目并在idea中打开2.4、pom修改2.5、application.yml配置…

P1927 防护伞

题目传送门&#xff1a;P1927 防护伞 作业出了这道题&#xff0c;写一篇题解纪念一下。 这道题可以简化为“先枚举所有点&#xff0c;然后把这些点到另外点距离的最大距离和其他点比较&#xff0c;求出最小距离”。 这样说可能也听不懂&#xff0c;还可以再简化&#xff1a; …

深度学习环境配置常见指令

首先打开anaconda prompt&#xff0c;激活对应虚拟环境。 导入torch并获取对应版本 import torch torch.__version__导入torchvision并获取对应版本 import torchvision torchvision.__version__ 检查cuda是否可用 torch.cuda.is_available() 获取CUDA设备数 torch.cuda.…

85、字符串操作的优化

上一节介绍了在模型的推理优化过程中,动态内存申请会带来额外的性能损失。 Python 语言在性能上之所以没有c++高效,有一部分原因就在于Python语言将内存的动态管理过程给封装起来了,我们作为 Python 语言的使用者是看不到这个过程的。 这一点有点类似于 c++ 标准库中的一些…

CAN——创建一个数据库DBC文件

一、创建一个工程 file——new——can 500kbaud1ch 得到一个工程文件.cfg 二、实现两个节点通讯 can networks 三、创建数据库DBC tool——candbeditor——file——creatdatabase——cantemplate.dbc 1.建数值表 view——value tables——空白处右击add—— definition 定…

shell脚本编写基础实战

1.判断当前磁盘剩余空间是否有20G&#xff0c;如果小于20G&#xff0c;则将报警邮件发送给管理员&#xff0c;每天检查一次磁盘剩余空间。 第一步&#xff1a;配置邮件服务 yum install mailx -y ------安装邮件服务 设置邮箱服务相关配置 vim /etc/mail.rc 第…

【线程池项目(二)】线程池FIXED模式的实现

在上一篇【线程池项目&#xff08;一&#xff09;】项目介绍和代码展示 中&#xff0c;我们展示了线程池的两个版本实现&#xff0c;它们的代码在具体的实现细节上是优化过了的。下文提供的代码并非完整&#xff0c;也有很多地方尚需改善&#xff0c;但这些差异对理解整个项目而…

深度学习(17)--DataLoader自定义数据集制作

目录 DataLoader自定义数据集制作 1.从标注文件(txt文件)中读取数据和标签 2.分别把数据和标签存在两个list中 3.设置完整的图像数据路径 4.根据任务整合出一个数据处理类 5.数据预处理 6.使用定义好的类来实例化DataLoader 7.检查数据和标签是否对应 8.使用创建好的D…

【行业会议】优积科技应邀参加住建部模块建筑企业2023年工作座谈会

2023年3月2日&#xff0c;优积建筑科技发展&#xff08;上海&#xff09;有限公司&#xff08;以下简称“优积科技”&#xff09;应邀参加由住房和城乡建设部科技与产业化发展中心&#xff08;以下简称“住建部科技与产业化中心”&#xff09;组织召开的模块建筑企业2023年工作…