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. 洛谷 P4343 [SHOI2015]自动刷题机

    思路 二分答案 显然的二分答案,但是因为二分判定条件 \(\text{wa}\) 了好几遍-- 可以发现,\(n\) 越大,\(k\) 就越小,所以答案是有单调性的,因此可以用两个二分,一次求最大值, ...

  2. 终于弄明白了 Singleton,Transient,Scoped 的作用域是如何实现的

    一:背景 1. 讲故事 前几天有位朋友让我有时间分析一下 aspnetcore 中为什么向 ServiceCollection 中注入的 Class 可以做到 Singleton,Transient, ...

  3. JDBC | 第七章: JDBC数据库连接池使用

    概述 数据库连接池是负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个.那么其中的运行机制又是怎样的呢?今天主要介绍一下数据库连接池原理和常用的连接池. ...

  4. Java 的八种排序算法

    Java 的八种排序算法 这个世界,需要遗忘的太多. 背景:工作三年,算法一问三不知. 一.八种排序算法 直接插入排序.希尔排序.简单选择排序.堆排序.冒泡排序.快速排序.归并排序和基数排序. 二.算 ...

  5. Android开发之ScrollView去掉右侧滚动条,gridview如何去掉外边框

    android:scrollbars="none" android:listSelector="@null"

  6. 6 vue-element.ui 左侧导航栏

    <template> <div> <el-menu :default-active="'/'+activeIndex2" mode="ver ...

  7. Windows下安装nvm管理多个nodejs版本

    平常在工作中难免会有node版本的要求,下面介绍一种利用nvm工具管理多个node版本的方法 下载安装 Github: Download nvm-windows --- nvm-setup.zip 程 ...

  8. Tomcat cluster方案共享session配置成功,yeah....

    后继版本:https://www.cnblogs.com/xiandedanteng/p/12143112.html 参考网文: 1.Tomcat官方文档 2.https://blog.51cto.c ...

  9. stackoverflow的ret2syscall利用

    ret2syscall 系统调用 ret2syscall,即控制程序执行系统调用,获取shell.Linux将内核功能接口制作为系统调用(system call),可在程序中直接调用.程序中存在int ...

  10. 前端插入date类型的数据到数据库

    //插入 @Override public boolean insertEmp(Emp emp) { String sql = "insert into emp(lwlEmpno,lwlEn ...