完全自学C(干货) —— 调试

干货 | 大牛谈嵌入式C语言的高级用法 C语言程序设计是我们的专业基础课,但是C语言本身却是一个非常强大的工具,它是到目前为止最为广泛使用的工具,并且在可以预见的将来,它仍然是皈依为程序员的人们心中的神器。这个工具作什么的呢?它在人和机器之间建立了一个交流的平台。如有小伙伴想自学,可以进群731871503进行交流 学习,提升编程,共同进步 我们把上面的场景复习一下: 你要我算100的阶乘,于是我去机房上机,编写了一个程序,运行程序,哦... 阅读详情
  • Bug,是指计算机上存在的漏洞,第一个bug是晶体管上的飞蛾;
  • Debug,又称除错,即发现和减少程序错误的过程;
  • 可监控程序,如变量的值、函数的调用过程、内存中数据、线程的调度等;

一,调试基本步骤

  • 发现程序错误的存在;
  • 以隔离、消除等方式对错误进行定位;
  • 确定错误产生的原因;
  • 提出纠正错误的解决办法;
  • 对程序错误予以改正,重新测试;

二,Debug/Release版本

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

相同代码在Debug/Release版本,文件大小不一样:

相同代码在Debug/Release版本,反汇编不一样:

相同代码在Debug/Release版本,越界访问在Release没有报错:

  • 变量在内存中开辟的顺序发生了变化,影响了程序执行的结果;

//此代码为越界访问

//debug版本时,arr[12]和i的地址恰巧是同一个;
//i和arr为局部变量,存放在栈区上,而栈区内存使用习惯为先高地址再低地址;
//如先声明arr再i,可避免覆盖,但结果还是会报错;

//可参考《C陷阱和缺陷》

int main()
{
	int i = 0;
	int arr[10] = { 0 };
	for (int i = 0; i <= 12; i++)
	{
		arr[i] = 0;
		printf("hehe\n");
	}
	return 0;
}

三,windows环境调试

  • Linux环境下,调试工具为gdb;

使用Visual Studio19编译器

根据要求设置版本

常用快捷键 —— 调试菜单

  • F5,启动调试(会直接跳到下个断点,常结合F9使用);
  • F9,设置断点,即代码运行到此行即暂停;
  • Ctrl + F5,开始执行(不调试),即直接运行代码无需调试;
  • F10,逐过程,通常用来处理一个过程(一次函数调用或一条语句),不进入调用函数内部;
  • F11,逐语句,即每次都执行一条语句,但可进入函数内部(最常用);

调试状态下查看程序当前信息

//调试代码,代码并不严谨,仅用于说明
void test1(int* p, int sz)
{
	int i = 0;
	for (i; i < sz; i++)
	{
		printf("%d ", (*p));
		p++;
	}
}

void test(int* p, int sz)
{
	test1(p, sz);
}

int main()
{
	int arr[9] = { 1,2,4,6,5,7,9,8 };
	int sz = sizeof arr / sizeof arr[0];
	test(arr, sz);
	return 0;
}
  • 查看变量值(调试-窗口-监视),在监视窗口输入对应变量即可;

  • 查看内存状态(调试-窗口-内存),在内存窗口输入地址或指针;

  • 查看调用堆栈(调试-窗口-调用堆栈)

  • 查看汇编信息,两种:调试-窗口-反汇编、右击-转到反汇编

  • 查看寄存器信息(调试-窗口-寄存器)

  • 设置断点时,可根据条件设置;

优秀代码

  • 代码运行正常;
  • bug很少;
  • 效率高;
  • 可读性高;
  • 可维护性高;
  • 注释清晰;
  • 文档齐全;

常见编码技巧

  • 使用assert;
  • 尽量使用const;
  • 养成良好编码风格;
  • 添加必要注释;
  • 避免编码陷阱;
#include<stdio.h>
#include<string.h>
#include<assert.h>

char* my_strcpy(char* dest, const char* src)
{
	char* cp = dest;
	assert(dest && src);
	while(*cp++ = *src++)
	{ ; }
	return dest;
}

int main()
{
	char str1[] = "aaaaaaa";
	char str2[] = "bbb";
	printf("%s\n", my_strcpy(str1, str2));
	return 0;
}

常见的编程错误

  • 编译型错误,常为语法错误,如缺失封号;
  • 链接型错误,如标识符名不存在或拼写错误;
  • 运行时错误,一般为可正常运行只是结果错误,需借助调试;
#include <stdio.h>
#include <assert.h>
//const放在指针变量*左边,修饰的是*p,即不可通过p来改变*p的值
//const放在指针变量* 右边,修饰的是p,即地址p不能修改
//添加const,可避免误操作字符串str,使代码更加健壮
size_t myStrlen(const char* str)
{
	assert(NULL != str); //断言,避免指针为空
	size_t count = 0;
	while (*str++)
	{
		count++;
	}
	return count;
}

int main()
{
	char str[] = "abcd";
	printf("%d\n", myStrlen(str));
	return 0;
}
const int num = 10;
num = 20; //有const修改,不可更改;
int* p = &num;
*p = 20; //虽然有const修改,但仍可更改;

参考代码:C:\Program Files (x86)\Windows Kits\10\Source\10.0.18362.0\ucrt\string

C语言最新学习路线(从入门到实战) C语言最新学习路线 关于C语言的学习路线整理了一张思维导图(还没整理完成,后续完善),今天先分享给大家 阅读详情

相关推荐

FLUENT UDF编译及蒸发冷凝相关问题

蒸发冷凝与相间传质

weixin_48029137的博客 1万+

完全自学C(干货) —— 预处理详解

预处理;

NapoleonCoder的博客 941

华为昇腾910B3显卡实战:手把手教你部署DeepSeek 32B模型(含Bge-zh向量库配置)

本文详细介绍了在配备8张华为昇腾910B3显卡的服务器上,从零部署DeepSeek 32B大模型推理服务的完整实战方案。内容涵盖环境准备、模型配置、多卡负载分配,并集成了BGE中文向量模型与ChromaDB向量数据库,最终通过Open WebUI构建了可投入生产的企业级AI应用栈,为私有化大模型部署提供了具体参考。

weixin_29038345的博客 1707

自学C语言的五大误区:为什么有人3个月放弃,有人却能成为高手?

C语言作为一门经典且强大的编程语言,在系统软件、嵌入式开发、游戏开发等众多领域都有着广泛的应用。许多人怀揣着对编程的热情踏上了自学C语言的道路,但结果却大相径庭:有的人在短短3个月内就选择放弃,而有的人则能逐渐成长为编程高手。造成这种差异的原因,很大程度上在于是否陷入了自学的误区。本文将为你揭示自学C语言的五大误区,帮助你避开陷阱,更高效地学习C语言。

星辰夜语的博客 1107

ArcMap投影变换避坑指南:为什么你的坐标转换总出错?常见问题解析与解决方案

本文深入解析ArcMap中坐标转换与投影变换的核心区别与常见陷阱。针对坐标转换总出错的问题,从混淆“定义投影”与“投影变换”、栅格数据重采样选择、矢量数据地理变换参数设置等关键环节,提供清晰的避坑指南与实战解决方案,帮助用户确保空间数据的精确匹配。

weixin_29210727的博客 356

【mysql8.0.33安装详情教程】

8、进入Account and Roles界面,输入密码,再点击next(密码随便输,自己记住就行)11、进入Apply Configuration界面,直接点Execute,等待应用成功。14、输入密码,点击check,检查是否正确。3、下图是选择安装类型,选择默认安装就可以,然后点击“next”。5、进入Product Configuration,点击next。9、进入Windows Service界面,直接点击next。15、点击Execute执行安装(完成后点击Finish)二、验证是否安装成功。

98渣渣辉的博客 2112

完全自学C(干货) —— 指针初识

指针即内存地址(编号);

NapoleonCoder的博客 356

Android Studio无法启动,Failed to create JVM:error code -1. JVM Path 完美解决方案

Android Studio无法启动,Failed to create JVM:error code -1. JVM Path 完美解决方案。 找到Android studio的启动文件bin目录,把studio64.exe.vmoptions 删除或改名(推荐改名,方便恢复),如果你是32位系统这个文件就是 studio.exe.vmoptions

陈万洲的专栏 4849

陈越c语言自学攻略,C语言自学攻略——陈越姥姥

作为一个零基础纯纯的小白,如何在两个月内入门,成为可以在各大题库砍小瓜切小菜的中手(不学数据结构成不了高手)?下面是本姥姥的纯干货实用攻略。第一步:每天勤洗手,保持身体健康,手指灵活。找到一台计算机,学习上网使用搜索引擎,会通过关键词找到自己需要的资料。准备好一个做笔记用的工具,可以是不插电的笔记本,也可以是私人博客空间等等。第二步:访问中国大学MOOC主站:https://www.icourse...

weixin_35725147的博客 1298

Open3D 点云转深度图像【2026最新版】

python版本Open3D 实现的点云转深度图像,博客长期更新,本文最新更新时间为:2026年5月10日。

点云侠的博客 2836

maxim max96712+max96717调试笔记

mxxim max96712 和max96717调试笔记

libuping2023的博客 1万+

c语言的翻译叫什么_大学C语言难学?来这里教你自学C语言!高分不是梦!干货预警!!!...

哈喽,朋友们,我是司露露lulu。身边很多人跟露露吐槽C语言太难了,考试要挂了!对于初学者来说,刚开始听不懂老师讲的东西很正常,老师觉得一些简单初级的东西不用讲,然而我们这些菜菜们没这些简单的东西铺垫,就更听不懂后面复杂的了!包括露露学的时候也很困难,开头为什么要写"#include <stdio.h>",主函数int main(),最后结尾为什么要写"return 0;"?因此我总结...

weixin_30066779的博客 463

openbmc mctp i3c适配步骤

本文介绍了在Intel OKS平台下,BMC作为I3C从设备如何适配MCTP over I3C的实现方法。主要内容包括:1)关键术语解释,如MDB(Mandatory Data Byte)值为0xAE,DCR(Device Characteristics Register)和BCR(Bus Characteristics Register)的设置;2)适配流程说明,包括BMC作为控制器主节点分配地址后成为MCTP端点,CPU作为总线所有者的角色转换;3)测试验证步骤,展示通过mctp-client工具发送指

wit_yuan的专栏 131

C语言自学保姆教程——第一节--编译准备与第一个C程序

致初学者 首先,祝贺你非常有眼光,选择C语言。从语言的流传度来说,C语言、C++和JAVA在每年语言使用在1000多种计算机语言中稳居前三。而C又是一门底层语言,却兼具高级语言和低级语言的特性,执行效率高,而且应用广泛,据说,两大操作系统--Windows和Linux 都是用C写成的。每年,因闻C的大名而慕名前来学习的人数不胜数。可是,想要将其学好,还是需要下一定的功夫的。而在C学好之后,我们可以学C++或者JAVA就易如反掌了,同时,你也掌握了一门编程语言,在未来学习数据结构和算法、数据库、Linux操

jxwd的博客 1471

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

自学编程的5大误区,早知道早避坑,过来人的宝贵经验

几乎每个学编程的人都会犯这些错误

龙叔的博客 4489

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C语言自学攻略

来验证一下:进入“教材配套习题”类,找“浙大版《C语言程序设计(第3版)》第1章”开头的卷子,一共有5张,需要5个金币来让你测试自己。页面右上角有个“签到”按钮,点一下,5个金币就从天而降了~ 在翁老师的课正式开始前,自己反复读懂教材第一章,把这5套小卷子做到满分。如果实在搞不到,那随便找哪本关键词带“C语言”、“程序设计”的教材,可能写作的思路和风格不同,但基本知识点应该都有的。如果你看到这里的时候,翁老师的课还没有开始,那么自己先读完第一章,了解一些基本概念。,保持身体健康,手指灵活。

cao123456oac的博客 1019

高级语言参数传递方式_大学C语言难学?来这里教你自学C语言!高分不是梦!干货预警!!!...

哈喽,朋友们,我是司露露lulu。身边很多人跟露露吐槽C语言太难了,考试要挂了!对于初学者来说,刚开始听不懂老师讲的东西很正常,老师觉得一些简单初级的东西不用讲,然而我们这些菜菜们没这些简单的东西铺垫,就更听不懂后面复杂的了!包括露露学的时候也很困难,开头为什么要写"#include <stdio.h>",主函数int main(),最后结尾为什么要写"return 0;"?因此我总结...

weixin_39846289的博客 241

c语言语法按照程序作用分为,干货|C语言编程

原标题:干货|C语言编程 谈及C语言,我想凡是学过它的朋友都有这样一种感觉,那就是“让我欢喜让我忧。”欢喜的是,C语言功能非常强大、应用广泛,一旦掌握了后,你就可以理直气壮地对他人说“我是电脑高手!”,而且以后若是再自学其他语言就显得轻而易举了。忧虑的是,C语言犹如“少林武功”一般博大精深,太难学了。其实就小编认为C语言并非是晦涩难懂的,只要你能理清思路,掌握它的精髓,那么学习C语言是一件非常容易...

weixin_28750379的博客 482

新时达服务器说明书_新时达C7000调试过程中现象的解决 附C7000菜单

电梯各大品牌1200种电子档资料维修视频免费送今天和大家分享一则新时达C7000系统在调试过程中遇见的种种问题,及处理过程,希望对大家在遇见类似现象时可以借鉴参考!!! 在一次老旧控制系统更新项目中(巨人通力GPS20K系统更新为新时达c7000控制系统),各安全部件安装到位,安全门锁及各控制信号也均已连接到位,检查测量各回路对地无短接现象,且供电电压在系统工作要求范围内,送电后主...

weixin_42471893的博客 1万+

自学编程的人,90%以上都会掉进这些坑,避开这些误区能提高N倍学习效率

老程序员的自学宝典,建议收藏

龙叔的博客 5万+

你想要知识干货?面试总结?或者有趣的内容,你想要的我全都有!

小伙伴们大家好,这里是优快云热榜小助手。听说你初来乍到,还没能玩转APP? 这一套热榜攻略送给你,这样玩

weixin_24938247的博客 717

零基础自学C语言|2027专升本考生的系统化学习攻略

整理精简笔记,标注易错点、重难点,定期回顾,避免学完就忘。

2501_90746506的博客 197

c语言小白能自学吗,零基础小白学编程,该如何入门?

编程作为当下最热门的职业,颇受年轻人的喜爱,很多人因为其高薪资,职业前景好的特点,纷纷选择转行加入编程的行列,但是,对于一个对编程知之甚少的小白来说,想要入门,应该从哪一步先开始,才能少走弯路呢?入门先从C语言入手小编认为,学习编程的第一步肯定是掌握一门编程语言。其实,大部分编程语言都十分相似,比如C++、C#、Java等都是从C语言一步步扩展得到的,因此,只要掌握C语言,其他的就可以触类旁通。C...

weixin_39616477的博客 1678

戏说c语言文章汇总,2024年最新满满的干货

本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论。

2401_83946044的博客 472

干货 | 聊聊这些年总结的一些学习方法

有很多朋友问过怎么学习 Framework,之前写了三篇文章,主要说的是之前开发应用的如何过渡到开发 Framework 。喜欢的可以通过下面的链接阅读。Android 如何从应用深入到...

飞哥的Python学习笔记 119

Python自学攻略:AI时代的高效学习法

(需要具体资源链接或学习监督,欢迎私信👉)“我目前在XX行业工作,想用Python解决XX问题,推荐学习路径?“这是我的代码:[代码片段],报错信息是:[截图],应该怎么修改?“这段代码运行太慢,帮我优化效率(特别是for循环部分)”“用比喻解释递归函数的工作原理,举一个现实中的例子”AI会根据你的情况生成定制化学习清单。(包装不上/版本冲突)

2403_88439206的博客 1181
上一篇: 完全自学C(干货) —— 数组
下一篇: 完全自学C(干货) —— 数据的存储
挨代码
博客等级 码龄5年 1696粉丝 384原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值