C语言-调试技巧

news2024/11/22 16:44:05

目录

  • 一、调试介绍
    • 1.1 Debug和Release的介绍
    • 1.2 Windows环境调试介绍
      • 1.2.1 学会快捷键
      • 1.2.2 查看临时变量的值
      • 1.2.3 查看内存信息
      • 1.2.4 查看调用堆栈
      • 1.2.4 查看汇编信息
      • 1.2.5 查看寄存器信息
  • 二、编程常见的错误
    • 2.1 编译型错误
    • 2.2 链接型错误
    • 2.3 运行时错误
  • 三、易于调试的代码

一、调试介绍

1.1 Debug和Release的介绍

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

1.2 Windows环境调试介绍

1.2.1 学会快捷键

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

1.2.2 查看临时变量的值

在这里插入图片描述

1.2.3 查看内存信息

在这里插入图片描述

1.2.4 查看调用堆栈

在这里插入图片描述通过调用堆栈,可以清晰的反应函数的调用关系以及当前调用所处的位置

1.2.4 查看汇编信息

(1)第一种方式:右击鼠标,选择【转到反汇编】:
在这里插入图片描述
(2)第二种方式:
在这里插入图片描述

1.2.5 查看寄存器信息

在这里插入图片描述
可以查看当前运行环境的寄存器的使用信息。

二、编程常见的错误

2.1 编译型错误

  直接看错误提示信息(双击),解决问题。或者凭借经验就可以搞定。相对来说简单。

2.2 链接型错误

  看错误提示信息,主要在代码中找到错误信息中的标识符,然后定位问题所在。一般是标识符名不存在或者拼写错误。

2.3 运行时错误

  借助调试,逐步定位问题。最难搞。

三、易于调试的代码

模拟实现strcpy

#include <assert.h>
//函数返回的是目标空间的起始地址
char* my_strcpy(char* dest, const char* src)
{
	char* ret = dest;
	//断言
	assert(dest != NULL);
	assert(src != NULL);
	while (*dest++=*src++)//*src != '\0'
	{
		//*dest = *src;
		//dest++;
		//src++;
		;//空语句
	}
	//*dest = *src;//\0的拷贝
	return ret;
}

int main()
{
	char arr1[] = "hello world";
	char arr2[20] = "###############";
	//char* p = NULL;
	my_strcpy(arr2, arr1);
	printf("%s\n",arr2);
	//printf("%s\n", my_strcpy(arr2, arr1));
	return 0;
}

const修饰指针
当const放在*的左边的时候,限制的是指针指向的内容,不能通过指针变量改变指针指向的内容,但是指针变量的本身是可以改变的。
当const放在*的右边的时候,限制的是指针变量本身,指针变量的本身是不能改变的,但是指针指向的内容是可以通过指针来改变的。

模拟实现strlen

size_t my_strlen(const char *str)
{
	assert(str);
	int count = 0;
	while (*str)
	{
		count++;
		str++;
	}
	return count;
}


int main()
{
	char arr[] = "abc";
	int len = my_strlen(arr);
	printf("%zd\n", len);
	return 0;
}

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

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

相关文章

如何配置和使用Apollo的component里的plugin

关于如何使用Apollo的Component里的plugin&#xff0c;在Apollo的文档里只有如果和开发的说明却没有找到一个清楚完整说明怎么把plugin跑起来的说明&#xff0c;例如我想把lidar_detection_filter按我们的需求对目标过滤算法作修改然后编译完后&#xff0c;执行 cyber_launch …

刷题训练之位运算

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟练掌握位运算算法。 > 毒鸡汤&#xff1a;学习&#xff0c;学习&#xff0c;再学习 ! 学&#xff0c;然后知不足。 > 专栏选自&#xff1a;刷题…

菜鸡学习netty源码(一)——ServerBootStrap启动

1.概述 对于初学者而然,写一个netty本地进行测试的Server端和Client端,我们最先接触到的类就是ServerBootstrap和Bootstrap。这两个类都有一个公共的父类就是AbstractBootstrap. 那既然 ServerBootstrap和Bootstrap都有一个公共的分类,那就证明它们两个肯定有很多公共的职…

代码随想录算法训练营第二天|977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II

977.有序数组的平方 题目链接https://leetcode.cn/problems/squares-of-a-sorted-array/description/ 题解&#xff1a; /*** Note: The returned array must be malloced, assume caller calls free().*/ int* sortedSquares(int* nums, int numsSize, int* returnSize) {/…

【Vue中的Ajax配置代理slot插槽】

Vue脚手架配置代理 安装命令 npm install axios vue.config.js 是一个可选的配置文件 如果项目的(和package . json同级的)根目录中存在这个文件&#xff0c; 那么它会被vue/cli-service自动加载 你也可以使用package.json中的 [vue字段&#xff0c;但是注意这种写法需要你严格…

Vue入门篇:样式冲突scoped,data函数,组件通信,prop data单向数据流,打包发布

这里写目录标题 1.组件的样式冲突scoped2.data函数3.组件通信1.两种组件关系分类和对应的组件通信方案2.父子通信方案的核心流程 4.prop & data、单向数据流5.打包发布6.打包优化:路由懒加载 1.组件的样式冲突scoped 默认情况:写在组件中的样式会全局生效→因此很容易造成多…

axios.get请求 重复键问题??

封装的接口方法&#xff1a; 数据&#xff1a; 多选框多选后 能得到对应的数组 但是请求的载荷却是这样的,导致会请求不到数据 departmentChecks 的格式看起来是一个数组&#xff0c;但是通常 HTTP 请求的查询参数不支持使用相同的键&#xff08;key&#xff09;名多次。如…

数据结构-链表OJ

1.删除链表中等于给定值 val 的所有结点。 . - 力扣&#xff08;LeetCode&#xff09; 思路一&#xff1a;遍历原链表&#xff0c;将值为val的节点释放掉 思路二&#xff1a;创建一个新链表&#xff0c;将值不为val的节点尾插到新链表中 /*** Definition for singly-linked …

Stable Diffusion WebUI 中调度器(Schedule type)简单研究

&#x1f48e;内容概要 在近期&#xff0c;stable diffusion webui更新了1.9版本&#xff0c;其中包含的一项变化就是&#xff0c;把采样器和调度器&#xff08;Schedule type&#xff09;分开了&#xff0c;之前是合并在一起来选择的&#xff0c;所以这篇文章主要分两个部分&…

用Langchain创建一个可以总结网页内容的Agent

去年的时候我写过一篇关于OpenAi Function Call的实践文章&#xff0c;就是用Function Call的功能实现抓取并总结网页内容的功能&#xff0c;具体可以参考ChatGPT函数调用初体验&#xff1a;让ChatGPT具备抓取网页文本的能力&#xff0c;当时写了还算比较多的代码&#xff0c;最…

查询每个部门工资最高的员工 sql

在线运行sql语句 CREATE TABLE dept (dno INT PRIMARY KEY AUTO_INCREMENT,dname VARCHAR(50) NOT NULL,dlocal VARCHAR(100) ); CREATE TABLE employee (eno INT PRIMARY KEY AUTO_INCREMENT,ename VARCHAR(50) NOT NULL,egender CHAR(2),deptno INT NOT NULL,ejob VARCHAR(5…

动态规划-两个数组的dp问题1

文章目录 1. 最长公共子序列&#xff08;1143&#xff09;2. 不相交的线&#xff08;1035&#xff09; 1. 最长公共子序列&#xff08;1143&#xff09; 题目描述&#xff1a; 状态表示&#xff1a; 建立一个二维的数组dp&#xff0c;dp[i][j]表示在第一个字符串的0到i区间以…

如何定时打开网站

首先&#xff0c;需要用到的这个工具&#xff1a; 度娘网盘 提取码&#xff1a;qwu2 蓝奏云 提取码&#xff1a;2r1z 1、打开工具按下Ctrl3&#xff0c;切换到定时器模块&#xff0c;左侧右键&#xff0c;选择新建 2、标题叫百度&#xff0c;等下就让它打开百度&#xff0c…

在Windows系统cmd中输入python无法启动想要的版本 | cmd输入python反而启动Microsoft Store

在Windows系统cmd中输入python无法启动想要的版本 | cmd输入python反而启动Microsoft Store 情况一&#xff1a;无法启动目标python版本&#xff0c;明明已经添加了环境变量 根源&#xff1a;环境变量Path中有多个版本的python路径&#xff0c;想启动的python对应的环境变量排…

STM32F407实现傅里叶变换的三种方法【附源码】

一、浅谈傅里叶变换&#xff08;Fourier Transformation&#xff0c;FT&#xff09; 1、傅里叶级数 想要了解傅里叶变换&#xff0c;就要先了解一下什么是傅里叶级数。 如图所示&#xff0c;通过不断合成不同频率的正弦波&#xff08;频率分量&#xff09;&#xff0c;合成后…

【电子通识】“二八定律”(巴莱多定律)在电子维修中也是这样吗?

二八定律的大意是说&#xff1a;少数20%的东西&#xff0c;占据了80%的另外一种东西。 比如世界大约20%的人占据了大约80%的财富&#xff1b;地球上20%的国家占据了80%的石油资源&#xff1b;太阳系中80%的质量集中在20%的天体上面&#xff1b;20%的疾病是80%病死者的直接死亡原…

什么是弹性云服务器(ECS)

弹性云服务器&#xff08;Elastic Cloud Server&#xff0c;ECS&#xff09;是由CPU、内存、操作系统、云硬盘组成的基础的计算组件。弹性云服务器创建成功后&#xff0c;您就可以像使用自己的本地PC或物理服务器一样&#xff0c;在云上使用弹性云服务器。 云服务器ECS&#x…

微软如何打造数字零售力航母系列科普07 - Azure PlayFab:你从未想过的世界上最大的开发工具(平台)

Azure PlayFab&#xff1a;你从未想过的世界上最大的开发工具 微软的James Gwertzman告诉GamesIndustry.biz Academy他帮助开发者成功的使命 制作游戏比以往任何时候都更容易上手。现在有无数的游戏引擎可供选择&#xff0c;其中大多数是免费的&#xff0c;PC空间的店面也同样重…

【CAN】知识点:错误帧、远程帧、过载帧

0、帧用途 数据帧:用于发送单元向接收单元传送数据的帧; 远程帧:用于接收单元向具有相同标识符的发送单元请求数据的帧; 错误帧:用于当检测出错误时向其它单元通知错误的帧; 过载帧:用于接收单元通知其尚未做好接收准备的帧 1、远程帧 1.1 帧结构 数据帧和远程帧有标…

C++深度解析教程笔记7

C深度解析教程笔记7 第13课 - 进阶面向对象&#xff08;上&#xff09;类和对象小结 第14课 - 进阶面向对象&#xff08;下&#xff09;类之间的基本关系继承组合 类的表示法实验-类的继承 第15课 - 类与封装的概念实验-定义访问级别cmd 实验小结 第16课 - 类的真正形态实验-st…