051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试——debug入门1

本文知识点: 程序调试——debug入门1

程序如何调试?——debug

工作中,开发人员和测试人员经常说,在找bug。那bug是什么呢?其实就是程序中的错误或者说是缺陷。为什么叫bug呢?

小故事时间:

bug英文是虫子的意思,为什么把错误叫虫子呢?



故事要回到遥远的计算机产生的时代。

那时候的计算机都还是大型机,一间大房子只能放一个大型机的那种大型计算机,由于天气炎热,大家把房间的窗户打开了,这时候有一天发现,这机器宕机了。无论如何都无法重启,



后来工作人员排查机器的问题,排查许久,才发现,是在机器的某个零部件上,一只小虫子被电死了。



所以后来大家把软件缺陷叫bug(虫子),把寻找缺陷的过程叫做debug。

调试有什么作用?

调试的过程其实就是寻找缺陷的过程,它就是使程序员能看清程序每一步的效果,在某行程序需要复杂代码查看结果的时候,可以使用debug进行调试,对比结果是否是自己预期的结果。

我们debug调试的更多不是编译错误,而是逻辑错误。即程序能正确编译运行的前提下:程序实际的输出结果与预计结果不一致的错误。

那这时候,我们就需要debug去调试查看程序每一步的运行结果。查看程序中每一步运行时,变量的值是否是符合要求的。

通过实例分析调试的必要性

比如在求阶乘累加和的问题中,我们知道s=1这条语句是十分重要的。

如果s不重置为1,在内重循环中进行阶乘运算的时候,s就会以之前运算过的值开始累乘。比如在求3的阶乘的时候,会在2的阶乘的基础上继续乘1乘2乘3,而不是直接1×2×3。所以我们在程序中进行了s=1的对s进行重置的操作。



那如果刚好程序员在编写代码的时候,那么可能就会发现我们的运算结果特别大,是不符合实际的要求,那这个时候呢,他就需要进行调试,查看一下,每个变量的值是否满足要求。所以,这就是调试的必要性。

演示调试过程和步骤——通过简单的for循环求和示例演示

步骤:

1、设置断点



什么是断点?从字面意思来看,也就是程序执行的过程中,执行到这个点的时候,程序就终止了。所以在调试的时候,我们需要设置一个终止点(即断点)的,就是让程序停到这个位置上,我们再查看结果。

断点可以设置多个,比如我要查看sum每一次的值的变化,我们就在程序第8行的位置,双击蓝色区域,会出现一个蓝色小点,这个就是断点breakpoint了。



如果想取消断点怎么办?双击断点位置,断点就取消了。

还可以通过鼠标右键点击断点位置,点击Toggle Breakpoint即可设置断点,再操作点击Toggle Breakpoint一下,就取消断点。

断点可以设置多个,如下图设置多个断点:



程序不设置短点的时候,一运行,就从头执行到尾,一下就显示输出结果了;而设置断点之后的程序,执行时,可以一步一步的进行单步调试也就是一行代码一行的执行。

2、执行调试



断点设置好以后呢,我们就开始进行调试。以前我们在运行程序的时候,一般比如说,我们单击右键,点run as,再点击Java Application

如果是调试程序,我们就右键、单击debug as ,之后单击Java Application

也可以在菜单栏Run中点击Debug,或者直接按F11。都可以进行调试、

或者在工具栏单击小虫子图标,进入debug视图、

进入debug视图后,开始调试。调试窗口就比我们以前编写代码的窗口复杂一些了。

分析一下这些窗口:

Debug窗口:展示的是当前代码的类名.方法名 在程序中是第几行

Variables窗口:变量窗口,查看程序中变量的状态(包含变量名和变量值的信息),主要的调试过程就是观察变量值每一步的变化

Breakpoint窗口:查看断点,当前例子中主方法的第8行位置是断点的位置

代码区域窗口:

outline大纲窗口: 查看程序的文件目录层次结构——包、类、方法。

最下方是console控制台窗口

3、单步调试



介绍一些快捷键:

F6:单步调试快捷键,单步调试是指一步一步向下执行

等后面继续学习,讲到Java方法的时候,还有一个快捷键F5,F5是在运行到自定义方法的时候,会跳到方法里去执行。这个我们暂时没学到就先忽略。

我们着重介绍F6快捷键的使用。

在菜单栏的Run中,我们也能找到F5、F6快捷键

在程序中,我们在第8行设置了断点,就是表明我们程序执行到第8行的时候会中止,就在第8行停下了,所以我们看到控制台中没有输出结果。

这个程序如果在不设置断点的情况下,会输出一个“sum=某数”的结果,但设置断点后,程序中止,console控制台就没有输出结果。

我们来看一下变量值的变化:

没有进行完整循环操作,没有对sum进行sum=sum+n操作之前,sum值为0, sum=sum+n操作之后的sum值要在执行下一条语句的时候这里的变量值窗口中才能显示出来

sum为0,说明我们第一次执行第8行这条语句的时候,程序就中止了,n的值此时为1,没有问题。

按一下快捷键F6,进行单步调试:单步调试完成后,我们发现程序执行位置到了第7行,sum的值变为了1。

小箭头指向第7行,表示第7行在执行(循环已经执行到了下一次)。那这时sum的值变为1了,因为经过了一次sum=sum+n (即:0+1)的运算。

再按一下快捷键F6,进行单步调试:

这时候相当于把第7行执行完了,第7行执行了n++,所以n由1自增到2。而sum在第7行中没有执行变化,所以sum的值还是1。

再按一下快捷键F6,进行单步调试:

这时候相当于把第8行再次执行完了,第8行再次执行了sum=sum+n (即:1+2)的运算,所以sum变为3。

所以我们发现,每个变量每次变量值的变化是在它执行完相应行的语句之后才发生改变的。

多次按快捷键F6,进行多次单步调试: 直到n=5,并同时计算好了sum的值,sum=15。

这之后,再最后按一下快捷键F6,进行单步调试:

我们观察,发现变量n在变量视图中消失了,为什么?

因为当n大于5的时候,就不满足循环条件了,n就退出了。

这时候,sum=15。但是console控制台依然没有输出结果,因为我们的输出语句还没有执行到。

继续F6单步调试

执行了输出语句之后,console控制台输出了执行结果

整个调试过程,都演示了。如果我们程序逻辑出问题的时候,我们可以这样通过debug调试,查看程序的单步执行结果,定位到程序逻辑错误或者缺陷的原因。

4、结束调试

停止调试,单击红色方框按钮

那如何回到代码编写视图呢?

有2个视图,一个debug,一个Java ,我们点击Java,就可以切换回代码编辑视图了。



总结

简单的调试过程演示到此

1、首先设置断点

2、然后debug程序

3、再去观察输出结果

F6单步调试快捷键比较重要,它是用于一步一步执行程序。

051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试——debug入门1的更多相关文章

  1. 052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试——debug2 多断点调试程序

    052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试--debug2 多断点调试程序 本文知识点: Eclipse下程序调 ...

  2. 053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结

    053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结 本文知识点: 流程控制知识总结 流程控制知识总结 选择结构语句 循环结构语句 ...

  3. 050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句

    050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句 本文知识点:continue语句 continue语句 continue ...

  4. 049 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 11 break语句

    049 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 11 break语句 本文知识点:break语句 break语句 break语句前情回顾 1.swi ...

  5. 048 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 10 案例——阶乘的累加和

    048 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 10 案例--阶乘的累加和 本文知识点:通过案例练习嵌套循环应用 案例练习--阶乘的累加和 案例题目 ...

  6. 047 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 09 嵌套while循环应用

    047 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 09 嵌套while循环应用 本文知识点:嵌套while循环应用 什么是循环嵌套? 什么是循环嵌套? ...

  7. 046 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 08 for循环的注意事项

    046 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 08 for循环的注意事项 本文知识点:for循环的注意事项 for循环的注意事项 for循环有3个 ...

  8. 045 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 07 for循环应用及局部变量作用范围

    045 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 07 for循环应用及局部变量作用范围 本文知识点:for循环应用及局部变量作用范围 for循环 w ...

  9. 044 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 06 使用do-while循环实现猜字游戏

    044 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 06 使用do-while循环实现猜字游戏 本文知识点:do-while循环深入运用 案例练习 案例 ...

随机推荐

  1. slua中,绑定lua文件到Monobehavior的一种方法

    slua本身并不提供如何把一个lua文件绑定到一个预制中,就像一个普通的继承自monobehavior的自定义脚本那样,而tolua的框架却采用了拙劣的做法: public class LuaBeha ...

  2. FastJSON解析JSON的时候保证深堆的顺序

    普通的JSONObject.parseObject(),解析的时候,底层采用HashMap解析所以是无序的, JSONObject params = JSONObject.parseObject(ex ...

  3. Java实现内嵌浏览器

    创建项目 ---->   导入需要的jar ---->  代码实现 需要的jar: https://pan.baidu.com/s/1MEZ1S0LnKSMGQm24QWgmCw 代码: ...

  4. 看图学习 ArrayBuffers 和 SharedArrayBuffers

    原文地址:A cartoon intro to ArrayBuffers and SharedArrayBuffers 原文作者:Lin Clark 译者:黑黑 校对者:Bob 在上一篇文章中,老司机 ...

  5. oracle之二实例管理及数据库的启动/关闭

    实例管理及数据库的启动/关闭   2.1 实例和参数文件 1.instance 功能:用于管理和访问database.instance在启动阶段读取初始化参数文件(init parameter fil ...

  6. [剑指Offer]26-树的子结构

    题意 判断一棵树(参数二)是不是另一棵树(参数一)的子结构. 题解 递归第一棵树,找两棵树中值一样的节点.若找到后,用另一个函数判断以相同值得节点为根的树2是不是树1的子结构. 代码 class Tr ...

  7. Vue企业级优雅实战04-组件开发01-SVG图标组件

    (后续的文章 公众号会提前一周更新,欢迎关注文末的微信公众号:程序员搞艺术) 预览本文的实现效果: # gitee git clone git@gitee.com:cloudyly/dscloudy- ...

  8. 云计算openstack共享组件——Memcache 缓存系统(4)

    一.缓存系统 一.静态web页面: 1.在静态Web程序中,客户端使用Web浏览器(IE.FireFox等)经过网络(Network)连接到服务器上,使用HTTP协议发起一个请求(Request),告 ...

  9. apche—LAMP(一)

    Apache HTTPD Server 简称 Apache,是 Apache 软件基金会的一个开源的网页服务器, 可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的 Web  ...

  10. Spock测试套件入门

    目录 Spock测试套件 核心概念 整体认识 前置.后置 同junit的类比 Feature 方法 blocks 典型的用法 异常condition then和expect的区别 cleanup bl ...