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. 用java中的Arraylist实现电话本系统管理

    大致思路:创建一个电话本条目的类,在主类中实例化.用实例化的对象调用构造参数接收输入值,然后将此对象存入Arraylist的对象中,实现动态添加电话本条目. 该系统具备添加.删除.修改.查询所有和按姓 ...

  2. [ASP.NET Core开发实战]开篇词

    前言 本系列课程文章主要是学习官方文档,再输出自己学习心得,希望对你有所帮助. 课程大纲 本系列课程主要分为三个部分:基础篇.实战篇和部署篇. 希望通过本系列课程,能让大家初步掌握使用ASP.NET ...

  3. 【Android】时间选择器,选择日期DatePicker 简单详解demo及教程

    作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 首先给大家看一下我们今天这个最终实现 ...

  4. hdu6704 2019CCPC网络选拔赛1003 K-th occurrence 后缀数组

    题意:给你一个长度为n的字符串,有q个询问,每次询问一个子串s(l,r)第k次出现的位置,若子串出现次数少于k次输出-1. 解题思路:先把SA跑出来,然后对于每次询问可以由l和rank[]找到l在所有 ...

  5. php反序列化总结与学习

    基础知识: 1.php类与对象 2.魔术函数 3.序列化方法 类与对象 <?php class test{ public $var = "hello world"; publ ...

  6. MyBatis源码流程分析

    mybatis核心流程三大阶段 Mybatis的初始化  建造者模式 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象.这种类型的设计模式属于创建型模式,它提 ...

  7. CTF资源

    WINDOWS 逆向工程师技能表 https://www.sec-wiki.com/skill/6 Software-Security-Learning https://chybeta.github. ...

  8. Java字符串的常用方法

    [转换] //int 10进制----> 转16进制Integer.toHexString(10) // int 10进制----> 转8进制Integer.toOctalString(1 ...

  9. JVM性能调优(1) —— JVM内存模型和类加载运行机制

    一.JVM内存模型 运行一个 Java 应用程序,必须要先安装 JDK 或者 JRE 包.因为 Java 应用在编译后会变成字节码,通过字节码运行在 JVM 中,而 JVM 是 JRE 的核心组成部分 ...

  10. Linux:crond(crontab)定时任务

    一..定义 Crond 是linux系统中用来定期执行命令或指定程序任务的一种服务或者软件.一般在安装完系统时,crond会默认存在. crond默认每分钟会检查系统中是否有需要执行的定时任务.如果有 ...