了解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.寄存器信息

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

相关文章
|
数据库 C++
《C++避坑神器·十七》找到程序崩溃Bug的一个实用方法:dump调试
《C++避坑神器·十七》找到程序崩溃Bug的一个实用方法:dump调试
158 0
|
编译器 C语言 C++
了解bug以及如何解决bug------调试(使用技巧)(下)
了解bug以及如何解决bug------调试(使用技巧)
93 0
了解bug以及如何解决bug------调试(使用技巧)(下)
|
数据库
学生信息管理系统----调试源代码bug
学生信息管理系统----调试源代码bug
92 0
|
监控 NoSQL Linux
【五、深入浅出GDB调试器】如何修复程序bug或优化代码:gdb调试器的来龙去脉与debug全方位实战详解(一)
【五、深入浅出GDB调试器】如何修复程序bug或优化代码:gdb调试器的来龙去脉与debug全方位实战详解
797 0
【五、深入浅出GDB调试器】如何修复程序bug或优化代码:gdb调试器的来龙去脉与debug全方位实战详解(一)
|
JavaScript 前端开发 API
每个 Bug 都值得认真对待:分享一个 debug 的案例,推荐给前端实习生参考
每个 Bug 都值得认真对待:分享一个 debug 的案例,推荐给前端实习生参考
311 0
|
NoSQL Shell C语言
【五、深入浅出GDB调试器】如何修复程序bug或优化代码:gdb调试器的来龙去脉与debug全方位实战详解(二)
【五、深入浅出GDB调试器】如何修复程序bug或优化代码:gdb调试器的来龙去脉与debug全方位实战详解
456 0
【五、深入浅出GDB调试器】如何修复程序bug或优化代码:gdb调试器的来龙去脉与debug全方位实战详解(二)
|
存储 NoSQL IDE
【五、深入浅出GDB调试器】如何修复程序bug或优化代码:gdb调试器的来龙去脉与debug全方位实战详解(三)
【五、深入浅出GDB调试器】如何修复程序bug或优化代码:gdb调试器的来龙去脉与debug全方位实战详解
366 0
【五、深入浅出GDB调试器】如何修复程序bug或优化代码:gdb调试器的来龙去脉与debug全方位实战详解(三)
对数器的使用----bug测试,文章中含有测试源码
对数器的使用----bug测试,文章中含有测试源码
103 0
对数器的使用----bug测试,文章中含有测试源码
|
存储 安全 程序员
避免bug实用调试技巧(和bug郭一起学C系列)
避免bug实用调试技巧(和bug郭一起学C系列)
128 0
避免bug实用调试技巧(和bug郭一起学C系列)
|
C++
学会调试,让你也成为改bug能手
学会调试,让你也成为改bug能手
113 0
学会调试,让你也成为改bug能手