C语言 实用调试技巧

news2025/2/27 14:12:53

我们的博客已经更新到了数据结构,但是当我在深耕数据结构时我发现我在C语言是遗漏了一个重要的东西,那就是C语言的使用调试技巧。这篇博客对数据结构非常重要,请大家耐心观看。

1. 什么是bug? 

第一次被发现的导致计算机错误的飞蛾,也是第一个计算机程序错误。

注:参考资料 https://zh.wikipedia.org/wiki/%E7%A8%8B%E5%BA%8F%E9%94%99%E8%AF%AF

 2. 调试是什么?有多重要?

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

一名优秀的程序员是一名出色的侦探。

每一次调试都是尝试破案的过程

我们是如何写代码的?

又是如何排查出现的问题的呢? 

拒绝-迷信式调试!!!!

2.1 调试是什么?

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

2.2 调试的基本步骤

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

2.3 Debug和Release的介绍。

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

从上述我们不难观察出debug和release它们的大小差异很大(debug 61KB    release 11KB)

那这是为什么呢?

这是因为debug包含了调试等其他的一系列的过程所以大小会更大。

3. Windows环境调试介绍

注:linux开发环境调试工具是gdb,后期博客会介绍。

3.1 调试环境的准备

在windows环境中选择 debug 选项,才能使代码正常调试 。

3.2 学会快捷键

最常使用的几个快捷键:

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

VS中常用的快捷键_vs快捷键-CSDN博客

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

3.3.1 查看临时变量的值

在调试开始之后,用于观察变量的值。

3.3.2 查看内存信息 

3.3.3 查看调用堆栈 

通过调用堆栈,可以清晰的反应函数的调用关系以及当前调用所处的位置。

3.3.4 查看汇编信息 

在调试开始之后,有两种方式转到汇编:
(1)第一种方式:右击鼠标,选择【转到反汇编】:

(2)第二种方式:

可以切换到汇编代码。 

3.3.5 查看寄存器信息

可以查看当前运行环境的寄存器的使用信息。

一定要熟练掌握调试技巧。
初学者可能80%的时间在写代码,20%的时间在调试。但是一个程序员可能20%的时间在写
程序,但是80%的时间在调试。
我们所讲的都是一些简单的调试。
以后可能会出现很复杂调试场景:多线程程序的调试等。
多多使用快捷键,提升效率。

本期的内容就到这里了,目的是为了帮助大家更好的学习数据结构相关知识。

感谢你的观看

后续会持续为大家更新数据结构知识。

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

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

相关文章

TCPIP协议总结

一、TCP的三次握手 TCP连接的建立时,双方需要经过三次握手,而断开连接时,双方需要经过四次分手,那么,其三次握手和四次分手分别做了什么呢?又是如何进行的呢? 通常情况下,建立连接的…

数据可视化看板的进阶之路:山海鲸可视化私有化部署体验

作为一名长期使用山海鲸可视化的资深用户,我在数据可视化看板的制作过程中,深刻感受到了这款软件带来的便捷与高效。今天,我想与大家分享一些我在使用山海鲸可视化制作数据可视化看板时的经验,给对这款产品同样感兴趣的朋友同行一…

使用ansible剧本进行lvm分盘

使用 Ansible 剧本(Playbook)进行 LVM 分区管理是一种自动化的方式,可以帮助管理员在多台主机上批量管理逻辑卷。 部署环境 3台主机,添加硬盘 ansible-galaxy collection install community.general 联网执行,下…

高防服务器秒解是什么意思

高防服务器秒解是指高防服务器在遭受大规模的DDoS攻击时,能够迅速解决问题或应对攻击。DDoS攻击是指攻击者通过向目标服务器发送大量的请求,使服务器资源耗尽或无法正常响应其他合法用户的请求,从而导致服务不可用。高防服务器通过具备高性能…

SLAM算法与工程实践——CMake使用(1)

SLAM算法与工程实践系列文章 下面是SLAM算法与工程实践系列文章的总链接,本人发表这个系列的文章链接均收录于此 SLAM算法与工程实践系列文章链接 下面是专栏地址: SLAM算法与工程实践系列专栏 文章目录 SLAM算法与工程实践系列文章SLAM算法与工程实践…

【vue】深入探讨vue中组件间多种传值方式

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

直流调速器DCS800-S02-0260-05模块DCS800S02026005

型号代码:DCS800-S02-0260-05 电压:525V; 电流:350A; 双桥; 重量:25公斤; 定制:否 最小起订量:1 件 产品名称:DCS800直流调速模块 产品净深/长度&…

Kotlin: 协程的四种启动模式(CoroutineStart)

点击查看CoroutineStart英文文档 创建协程的三种方式 runBlocking 运行一个协程并且会阻塞当前线程,直到它完成。launch 启动一个新的协程,不会阻塞当前线程,并且返回一个Job,可以取消。async async和await是两个函数&#xff0c…

【CSPP】2021-04-2 邻域均值 经典二维前缀和

2021-04-2 邻域均值 经典二维前缀和 索引2021-04-2 邻域均值 经典二维前缀和思路遇到的问题完整代码 索引 历年CSP认证考试真题题解总汇持续更新 2021-04-2 邻域均值 经典二维前缀和 这题算是第二题中简单的那种了,但是我还是写了接近40分钟才AC,写二…

HTML静态网页成品作业(HTML+CSS)——世博园介绍(2个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有2个页面。 二、作品演示 三、代…

四.流程控制(顺序,分支,循环,嵌套)

c刚刚转过来的记得写在public static void main(String[] args)的花括号里 一.顺序结构 二.分支结构 if ,switch 1.if (条件判断) 2.if else 3.if else if else if ... else(它是一个一个否定来一个个执行判断的 4.s…

torchvision pytorch预训练模型目标检测使用

参考: https://pytorch.org/vision/0.13/models.html https://blog.csdn.net/weixin_42357472/article/details/131747022 有分类、检测、分割相关预训练模型 1、目标检测 https://pytorch.org/vision/0.13/models.html#object-detection-instance-segmentation-…

Springboot笔记-03

1.properties配置文件 #配制oerson的值 person.lastname张三 person.age12 person.birth2017/12/12 person.bossfalse person.dog.namedag person.dog.age15 person.maps.k1v1 person.maps.k212 person.listsa,b,c运行结果乱码 因为idea默认是utf-8编码而properties是ascall编…

禅道二次开发——创建需求

获取Token 官网参考 https://www.zentao.net/book/api/setting-369.html post http://xxx:8442/zentaopms/www/api.php/v1/tokensbody {"account": "xxx", "password": "xxx"}结果如下图 创建需求 官网参考 https://www.zentao.…

一文掌握:Gitlab的完整使用手册

🐓序言 GitLab是一个强大的版本控制和协作平台,用于管理代码仓库、项目、问题跟踪、持续集成和部署等软件开发任务。可以做一些创建项目、添加成员、管理代码、问题跟踪和持续集成等方面功能。 🐓创建Gitlab账户 如果你还没有GitLab账户&…

如何正确理解和区分承诺型OKR与愿景型OKR?

在目标管理的实践中,OKR(Objectives and Key Results)工作法作为一种高效的目标设定与跟踪工具,得到了广泛的应用。然而,OKR并非一种固定的模式,它可以根据企业的战略需求和文化背景进行灵活调整。其中&…

npm i安装依赖报错,但是cnpm i 却安装成功

问题描述:在a项目中npm i 安装依赖时发生以上报错,但是cnpm i 却成功,而且在其他项目中npm i 安装其他项目依赖也能成功.... 解决办法:删除项目中package-lock.json文件后再npm i 即可

Linux系统——数据库Mysql

目录 一、数据库原理 1.数据的时代 2.数据的分类 3.数据库的发展史 3.1文件管理系统的缺点 3.2数据库系统发展阶段 4. 数据库的基本概念 4.1数据 4.2表 4.3数据库 5.DBMS——数据库管理系统 5.1数据库管理系统的优点 5.2数据库管理系统的基本功能 5.3数据库管理系…

ruoyi-nbcio-plus基于vue3的flowable定时边界事件代码升级修改(二)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码:…

用 二层口 实现三层口 IP 通信的一个实现方法

我们一般用 undo portswitch 来将二层口转为三层口,但如果设备不支持的话,那么。。。 一、拓朴图: 二、实现方法: 起一个 vlan x,配置 vlanif地址,然后二层口划分到 vlan x 下,对端做同样的配置…