了解bug以及如何解决bug------调试(使用技巧)(上)

简介: 了解bug以及如何解决bug------调试(使用技巧)

前言

人非圣贤孰能无过,我们在编写程序代码的时候,或多或少都会有一些计算机程序错误(bug)出现。

可能是编译型错误:一般是语法错误,看错误提示信息就能解决;

也可能是链接型错误:一般是标识符名不存在(未声明)或者标识名符名的拼写错误

但最让人头疼的还是运行时的错误:看不懂的英文版错误提示,甚至有时候都没有错误提示,这时候要找到出现问题的位置就很困难了,为了解决这类bug,我们本次文章将引入一个新的名词------调试。

如果你也和我一样,常常因为找不到程序中的bug而苦恼,每天迷信式修改bug,修改成功了不知道为什么成功,修改失败了,也不知道为什么失败,那么请仔细阅读这篇文章,相信你会收获颇多。

一、bug

1.谁会发现bug?

  1. 程序员自己
  2. 测试人员
  3. 用户

2.如何发现并解决bug?(步骤)

  1. 通过隔离、删除等方式对bug进行定位
  2. 确定bug产生的原因
  3. 提出纠正bug的办法
  4. 对程序错误予以改正,并且重新测试

二、调试

1.调试是什么?为什么要进行调试?

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

程序 错误的一个过程。

我们为什么要进行调试呢?

每次程序运行,我们只能看到程序运行的最终结果,而不知道程序运行的过程中到底发生了什么。举个例子:当实际输出值和预期输出值不同,我们不能只通过表面上的几行代码来确定到底是哪一步运行错误了。而调试可以带我们走进程序运行的过程,帮我们确定到底是运行的哪一步出现错误,所以可以通过调试找出错误。

2.调试的环境

(作者本人在学习C语言的过程中使用的是Windows环境下的VS2013,所以本次讲解的调试技巧以及范例测试都是在VS2013上进行的,其他环境下的调试方法也都相类似,本文仅供参考)

要设置调试的环境,我们首先要了解和调试有关的概念------版本:

  • Debug:调试版本,包含调试信息(我们进行调试时就要将程序调整到这个版本下)
  • release:发布版本,相较于调试版本,他进行了更多的优化,使程序在内存大小和运行速度上优于调试版本,以便用户得到更好的对用体验。(release版本不能进行调试)

具体位置如图所示:

我创建的项目名叫Debugging,首先分别在程序中运行debug版本和release版本,再打开程序所在的文件夹,里面会产生debug和release两个文件夹。由下面两张图片可以对比看出release版本在内存上比debug版本小了很多。

①debug文件打开后的内容:

②release文件打开后的内容:

3.调试的快捷键

(只列举了几个常用的,如果有需要之后会专门整理一次)

  • //启动调试,运行到下一个断点处;
  •  //(一般和搭配使用)创建断点和取消断点;

断点:

①可以在程序的任意位置设置断点,从而使程序在想要的地方停止再一步一步运行下去;

②可以通过设置断点,跳过之前的正常代码直接运行到断点处;

③可以通过设置断点范围,将程序停止在某一次的循环或者递归。

  • //逐语句运行代码;
  • //逐句运行代码,与的区别:使用可以使执行逻辑进入所调用的函数内部(常用)
  • Ctrl+  //直接运行程序,不进行调试

如果直接使用、等快捷键不起作用,可以尝试用+(指代到)

三、调试时所查看的内容

1.临时变量的值

调试开始后可以直观看到变量中的值

(如果要删除所观察的某个变量,可以用鼠标选中这个变量然后用Delete键,即可删除)

2.内存信息

3.调用堆栈

4.汇编信息

这个在之前的函数栈帧的创建与销毁的文章中有提到,可以通过汇编信息查看程序运行的底层逻辑(有两种方法:①右击鼠标②调试项)

5.寄存器信息

寄存器的相关概念也在函数栈帧的创建与销毁中提到,想了解的伙伴可以去看看。

相关文章
|
算法 安全 数据挖掘
如何更轻松地学习差分隐私——《动手学差分隐私》中文版正式发布!
2022年10月28日,阿里巴巴集团数据技术及产品部DataTrust团队成员刘巍然、李双为差分隐私在线书籍《动手学差分隐私(Programming Differential Privacy )》提供的中文翻译版本正式被原著作者Joseph P. Near和Chiké Abuah合并到书籍GitHub仓库(https://github.com/uvm-plaid/programming-dp/)中
3593 0
如何更轻松地学习差分隐私——《动手学差分隐私》中文版正式发布!
|
Windows Python
Windows下pip设置国内源阿里云镜像加速
Windows下pip设置国内源阿里云镜像加速
5965 0
Windows下pip设置国内源阿里云镜像加速
|
11月前
|
编解码 语音技术 数据安全/隐私保护
企业微信协议语音链路的技术实现
企业微信移动端语音采用0x0602指令,通过长连接传输Silk压缩流,降低30%首包延迟。协议含固定帧头与TLV结构,支持AES加密与实时解码,网关可透明转码对接ASR系统,整体延迟约8ms,CPU占用低。
604 0
|
SQL 关系型数据库 MySQL
三、Sqoop 全量导入核心命令
在大数据处理过程中,数据库表怎么高效导入到 Hadoop?这一篇我带大家实战讲解 Sqoop 全量导入 的用法,从基础命令到常用参数配置,再到导入到 HDFS、Hive 的各种格式案例,配合实操示例,帮你一步步掌握全量导入技巧。最后还有练习题,供大家动手巩固一下。
587 2
|
关系型数据库 MySQL 数据库
在 MySQL 中使用 LIKE
【8月更文挑战第12天】
2576 1
|
存储 供应链 前端开发
如何开发一套仓库管理系统?(附架构图+流程图+代码参考)
仓库管理系统(WMS)是现代企业高效管理库存、出入库及仓储操作的关键工具。本文介绍WMS的核心功能,包括仓库管理、库存调拨、出入库操作、盘点及数据统计等模块,并详细解析其业务流程与开发实现方法。通过WMS,企业可提升仓储效率、减少错误与成本,优化供应链管理。此外,文章还提供系统开发技巧与常见问题解答,助力企业构建高效、智能的仓库管理系统。
|
存储 缓存 开发工具
Xcode 清理大法
Xcode 清理大法
2008 0
|
安全 算法 物联网
SSL/TLS:互联网通信的加密基石与安全实践
**简介:** 在数字化时代,互联网每天传输海量敏感数据,网络攻击频发。SSL/TLS协议作为网络安全的基石,通过加密技术确保数据安全传输。本文解析SSL/TLS的技术架构、密码学原理、应用场景及常见误区,探讨其在未来的发展趋势,强调持续演进以应对新型威胁的重要性。 SSL/TLS不仅保障Web安全,还广泛应用于API、邮件、物联网等领域,并遵循合规标准如PCI DSS和GDPR。
|
传感器 存储 人工智能
一文彻底搞清楚数字电路
数字电路是处理离散二进制信号(0和1)的电子电路,由逻辑门(如与门、或门等)组成,实现各种逻辑运算。它在计算机、通信、自动控制和数字信号处理等领域广泛应用。例如,CPU通过数字电路执行算术和逻辑运算,PLC用于工业自动化控制,数字滤波器则用于信号处理。数字电路以高电平(如5V)表示1,低电平(如0V)表示0,简化了信号处理并提高了系统的可靠性和抗干扰能力。
2466 0
一文彻底搞清楚数字电路
|
机器学习/深度学习 数据可视化 数据挖掘
【10月更文挑战第4天】「Mac上学Python 5」入门篇5 - Jupyter 环境配置与高效使用技巧
本篇将介绍如何在Mac系统上安装和配置Jupyter,并详细介绍Jupyter Notebook的一些常用“神奇函数”。Jupyter是一个支持交互式计算的工具,广泛用于数据分析、机器学习等领域,通过学习本篇,用户将能够在Python项目中高效使用Jupyter Notebook。
891 3
【10月更文挑战第4天】「Mac上学Python 5」入门篇5 - Jupyter 环境配置与高效使用技巧