当程序遇上困难:程序调试的艺术(VS)

简介: 当程序遇上困难:程序调试的艺术(VS)

前言

程序调试,是每个程序员在开发过程中都会遇到的必经之路,今天将分享一些实用的调试技巧,来修炼我们内功,拥有好的内功可以让我们的编程更加得心应手哦·。


一、什么是bug?

Bug是指在程序或系统中存在的错误或缺陷。它可能导致程序无法按照预期的方式运行或产生意外的结果。Bug可以是由编程错误、逻辑错误、算法问题、外部环境变化等引起的。当程序员在开发过程中遇到bug时,他们需要通过调试来定位和修复这些问题,以确保程序的正确性和稳定性。

编程常见的错误

常见的错误分类:

编译型错误

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

链接型错误

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

不存在或者拼写错误。

运行时错误

也就是程序运行时逻辑上的错误。此类错误纠正最为麻烦。

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

二、调试是什么?有多重要?

所有发生的事都一定有迹可循,如果问心无愧,就不需要掩盖也就没有迹象了,如果问心有

愧,就必然需要掩盖,那就一定会有迹象,迹象越多就越容易顺藤而上,这就是推理的途径。顺着这条途径逆流而上,就是真相。所以每一个合格的程序员都是一名出色的侦探。

想必许多初学者在日常敲代码的过程中都会遇到程序可以运行但不是自己预期结果的情况,遇到这种情况怎么办呢?大多数人估计都是一行一行的去检查逻辑,然后去猜错误的位置,不容易准确定位到错误位置。那么学会调试,就可以很好的解决这个问题,帮助你更快的锁定错误位置。

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

调试的基本步骤

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

Debug和Release

我们在日常使用编译器时,编译器顶部都会有这样的选项:

它们有什么不同呢?

它们在可执行的文件上也有所不同:

Release版本下执行产生的可执行文件:

Debug版本下:

我们会发现它们两个产生的可执行文件的大小有着不小的差距,Debug版本为调试版本,里边包含了所以的调试信息,而Release版本为发布版本,代码在系统上运行时会做一定的优化,所占内存也会更小。

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

Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。

此外要特别注意,在Release版本下是无法进行程序调试的。

这里不再对两个版本不同进行详细介绍。

三、windows环境调试介绍

我们要想调试一个程序,必须要是处于Debug的版本下才可以进行调试。

学会使用快捷键进行调试

最常使用的几个快捷键:

F5

启动调试,经常用来直接调到下一个断点处。

F9

创建断点和取消断点 断点的重要作用,可以在程序的任意位置设置断点。这样就可以使得程序在

想要的位置随意停止执行,继而一步步执行下去。

F10

逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句。

F11

逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑进入函数内部(这是

最长用的)。

CTRL + F5

开始执行不调试,如果你想让程序直接运行起来而不调试就可以直接使用。

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

调试查看临时变量的值

当然我们也可以通过调试来查看当先变量的值,可以先按F10或F11先让程序进入调试的状态下,然后在调试功能的里找到窗口,在窗口的选项里找到监视(只有在调试状态下打开窗口才有),就可以弹出监视栏。

输入想要查看当前变量的名字就可以查看到此时变量的数值。

查看调用堆栈

在窗口里找到调用堆栈选项。

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

 

调试示例练习

int main()
{
int i = 0;
int sum = 0;//保存最终结果
int n = 0;
int ret = 1;//保存n的阶乘
scanf("%d", &n);
for(i=1; i<=n; i++)
{
int j = 0;
for(j=1; j<=i; j++)
{
ret *= j;
}
sum += ret;
}
printf("%d\n", sum);
return 0;
}

这段代码输入3我们期望的输出值是9,而实际输出是15,大家可以通过调试来寻找错误。

示例答案

在程序运行过程中,每次i变化循环都需要将ret初始化为1,上述代码由于未将ret及时初始化为1,导致i=3时,ret的值为2,循环结束后ret的值变为12(2*1*2*3)。1+2+12的值就等于15了。


总结

本期先讲介绍都只是一些简单调试技巧,在后边我们会遇到更复杂的调试情况。使用快捷键可以提高我们的调试效率。

对于初学者来说可能80%的时间在写代码,20%的时间在调试。但是一个程序员可能20%的时间在写程序,但是80%的时间在调试。

在私下里要多多动手,尝试调试,才能有进步哦。好的本期内容到此结束,感谢阅读!

相关文章
|
安全 数据挖掘 文件存储
开发者如何使用文件存储CPFS
【10月更文挑战第8天】开发者如何使用文件存储CPFS
355 1
|
Kubernetes 固态存储 调度
Kubernetes(k8s)容器编排Pod调度策略
Kubernetes(k8s)容器编排Pod调度策略
338 0
String.format()函数的简单用法
1.String.format()函数的用法 2.常用转换符 3.常用标识
360 0
|
算法 调度 UED
操作系统(7)----调度相关知识点(万字总结~)(1)
操作系统(7)----调度相关知识点(万字总结~)
515 0
|
传感器 监控 供应链
物联网技术在智慧工地中如何应用?
物联网技术在智慧工地的应用主要包括:实时项目状况监控,通过传感器监测环境条件;人员与设备管理,利用RFID或人脸识别技术记录考勤,实时追踪工人位置;环境与安全监控,确保符合安全标准;施工效率与成本控制,优化资源分配;远程监控与智能分析,支持远程决策;材料管理与供应链优化,减少浪费;智能施工与自动化,提高施工效率。这些应用提升了工地的智能化水平,加强了安全管理,促进了建筑行业的数字化转型。
570 3
|
XML 数据格式 Python
Python模块导入包括:`import math`导入标准库
【6月更文挑战第23天】Python模块导入包括:`import math`导入标准库,`from math import sqrt`导入单个函数,`import numpy as np`给模块取别名,`from random import *`导入所有(不推荐),`import xml.etree.ElementTree as ET`导入子模块,`import_module(&#39;pandas&#39;)`按需导入,和使用相对路径如`from .module import func`处理项目结构。记得调整`sys.path`以包含自定义模块路径。
490 4
|
消息中间件 存储 负载均衡
我服了,RocketMQ消费者负载均衡内核是这样设计的
文章为理解RocketMQ的负载均衡机制提供了深入的技术洞察,并对如何在实际应用中扩展和定制负载均衡策略提供了有价值的见解。
我服了,RocketMQ消费者负载均衡内核是这样设计的
|
消息中间件
RabbitMQ之死信队列
【1月更文挑战第10天】先从概念解释上搞清楚这个定义,死信,顾名思义就是无法被消费的消息,字面意思可以这样理解,一般来说,producer 将消息投递到 broker 或者直接到 queue 里了,consumer 从 queue 取出消息进行消费,但某些时候由于特定的原因导致 queue 中的某些消息无法被消费,这样的消息如果没有后续的处理,就变成了死信,有死信自然就有了死信队列。 应用场景:为了保证订单业务的消息数据不丢失,需要使用到 RabbitMQ 的死信队列机制,当消息消费发生异常时,将消息投入死信队列中.还有比如说: 用户在商城下单成功并点击去支付后在指定时间未支付时自动失效。
649 107
|
SQL 关系型数据库 MySQL
一文速学-玩转MySQL中INTERVAL关键字和INTERVAL()函数用法讲解
一文速学-玩转MySQL中INTERVAL关键字和INTERVAL()函数用法讲解
1231 0
一文速学-玩转MySQL中INTERVAL关键字和INTERVAL()函数用法讲解
|
编解码 边缘计算 自然语言处理
2024年5月计算机视觉论文推荐:包括扩散模型、视觉语言模型、图像编辑和生成、视频处理和生成以及图像识别等各个主题
五月发布的计算机视觉领域重要论文涵盖了扩散模型、视觉语言模型、图像生成与编辑及目标检测。亮点包括:1) Dual3D提出双模式推理策略,实现高效文本到3D图像生成;2) CAT3D利用多视图扩散模型创建3D场景,仅需少量图像;3) Hunyuan-DiT是多分辨率的中文理解扩散Transformer,可用于多模态对话和图像生成;4) 通过潜在扩散模型从EEG数据重建自然主义音乐,展示复杂音频重建潜力。此外,还有关于视觉语言模型和图像编辑的创新工作,如BlobGEN用于合成具有控制性的图像。
588 3

热门文章

最新文章