C语言初阶————调试实用技巧1

2026年1月13日学习总结:

开始学习新篇章------调试,在这章中我们将更熟悉编写代码的应用和自己的代码,本次关于学习主要分为以下三个部分:

**本文章的调试以VS 2022为例**

(1)什么是Bug? 导致程序运行不正常的错误。

历史上第一个Bug是导致计算机错误的飞蛾,这同时也是第一个计算程序错误。

(2)调试是什么?有多重要? 我们平常是如何写程序的?对于初学者而言基本就是复制,粘贴地去模仿他人的程序; 那么我们平常出现错误是如何找错?通常迷信式找错:一个又一个可能出错点去试,但这样消耗时间大大增加,这显然不是正确的方法。 所以我们得找寻正确的方法,一名优秀的程序员也是一名出色的"侦探"。侦探在查案时通常坚信"所以发生的事情都一定有迹可循,如果问心无愧就不需要掩盖也没有踪迹,但如果问心有愧就必然需要掩盖,那就一定有痕迹,痕迹越多就容易顺藤而上。"的推理过程,顺着这条途径顺流而下就是犯罪,逆流而上就是真相。而我们程序员在对于自己写的程序发生Bug时就需要学习侦探的推理去解决Bug,也就是我们通常所说的调试。

1.调试是什么?

调试,又叫除错,是发现和减少计算程序或电子仪器设备中程序错误的一个过程。

2.调试的基本过程:

①发现程序错误的存在(发现的对象:程序员自己、测试人员、用户)

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

③确定错误产生的原因

④提出纠正错误的解决方法

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

3.Debug和Release的介绍

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

②Release称为发布者版本 通常进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户更好使用。(不能逐步调试)

当对于同一个函数使用不同的版本运行后存放程序的文件夹会分别出现相应的文件夹。 两个不同的文件夹中的应用程序(.exe)的大小有很大区别: Debug文件夹中 Release文件夹中 相对来说Release文件夹中的应用程序的内存较小。

(3)Windows环境VS调试介绍

1.调试环境的准备------选择Debug

2.学会快捷键:

常用快捷键:

F5:启动调试 经常用来直接跳到下一个断点处 (一般按下后会出现如下图所示的调试相关窗口,可查看变量和内存以及随着操作的相关内容的实时变化)*出现该窗口的前提是程序中有设置的断点*

F9:创建/取消断点 断点:a.可以在任意位置设置; b.使程序直接执行到该位置,然后一步步执行下去。

如图设置断点后就会在对应行出现小红点。断点还可以更细节的设置,将光标移动到断点上会出现菜单,单击设置会出现以下菜单选项:(可以根据需要进行选择设置)

F10:逐过程调试(不进入调用函数内) 应该过程:a.一次函数调用;b.一条语句。

F11:逐语句调试 一个语句,可以进入被调用函数内部(最常用)

cs 复制代码
int Add(int n, int m)
{
	return n + m;
}
int main()
{
	int a = 20;
	int b = 10;
	int c = Add(a, b);
	printf("%d\n",c);
	return 0;
}

由上述程序为例如果设置断点在Add函数中,按下F10会从main函数中逐步运行到程序最后,当然会进入Add函数中;按下F11会直接从Add函数中再一步步运行到从该函数内部到调用该函数的main函数的地方到主函数结尾。

Ctrl+F5:开始执行不调试(直接运行程序)

注意:单功能键在大多数笔记本电脑中因为被规定的特定功能,所以在VS的快捷键可能不起作用,为了使用可以借助辅助功能键Fn,在使用时加上Fn或者关掉Fn。

当然调试不仅仅是快捷键可以操作,当然也可以在菜单中选择"调试",单击在弹出的菜单中进行选择。

注意:在调试时可以跳回已运行的步骤,但是不建议,因为向前调试后的参数值一般不准确,向前调没有太大意义。

相关推荐
ZK_H1 小时前
半导体工艺流程
java·c语言·开发语言·计算机网络·金融
计算机安禾1 小时前
【数据结构与算法】第39篇:图论(三):最小生成树——Prim算法与Kruskal算法
开发语言·数据结构·c++·算法·排序算法·图论·visual studio code
liliangcsdn1 小时前
sentence-transformer如何离线加载和使用模型
开发语言·前端·php
Crazy________1 小时前
4.10dockerfile构建镜像
java·开发语言
fish_xk1 小时前
c++内存管理
开发语言·c++·算法
独特的螺狮粉1 小时前
城市空气质量简易指数查询卡片:鸿蒙Flutter框架 实现的空气质量查询应用
开发语言·flutter·华为·架构·harmonyos
网域小星球1 小时前
C语言从0入门(八)|函数基础:封装、调用与参数传递精讲
c语言·开发语言
东宇科技1 小时前
如何使用js进行抠图。识别商品主体
开发语言·javascript·ecmascript
Dxy12393102161 小时前
Python使用PyEnchant详解:打造高效拼写检查工具
开发语言·python
网域小星球1 小时前
C语言从0入门(十)|二维数组详解与矩阵实战
c语言·算法·矩阵·二维数组·数组遍历