051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试——debug入门1
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的更多相关文章
- 052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试——debug2 多断点调试程序
052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试--debug2 多断点调试程序 本文知识点: Eclipse下程序调 ...
- 053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结
053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结 本文知识点: 流程控制知识总结 流程控制知识总结 选择结构语句 循环结构语句 ...
- 050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句
050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句 本文知识点:continue语句 continue语句 continue ...
- 049 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 11 break语句
049 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 11 break语句 本文知识点:break语句 break语句 break语句前情回顾 1.swi ...
- 048 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 10 案例——阶乘的累加和
048 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 10 案例--阶乘的累加和 本文知识点:通过案例练习嵌套循环应用 案例练习--阶乘的累加和 案例题目 ...
- 047 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 09 嵌套while循环应用
047 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 09 嵌套while循环应用 本文知识点:嵌套while循环应用 什么是循环嵌套? 什么是循环嵌套? ...
- 046 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 08 for循环的注意事项
046 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 08 for循环的注意事项 本文知识点:for循环的注意事项 for循环的注意事项 for循环有3个 ...
- 045 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 07 for循环应用及局部变量作用范围
045 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 07 for循环应用及局部变量作用范围 本文知识点:for循环应用及局部变量作用范围 for循环 w ...
- 044 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 06 使用do-while循环实现猜字游戏
044 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 06 使用do-while循环实现猜字游戏 本文知识点:do-while循环深入运用 案例练习 案例 ...
随机推荐
- istio的安全(概念)
Istio 安全(概念) 目录 Istio 安全(概念) 高层架构 Istio身份 身份和证书管理 认证 Mutial TLS认证 宽容(Permissive)模式 安全命名 认证架构 认证策略 策略 ...
- PageObject六大原则
The public methods represent the services that the page offers 公共方法表示页面提供的服务 Try not to expose the i ...
- 读Twinsen的深入探索透视投影变换
2017.10.16更新,分割线下面是以前的文字,有表达的意思,却言不达意,实属羞耻,看官只需看前面文字即可. Twinsen大神的<深入探索透视投影变换>有几个点说得不够清晰,我这里提一 ...
- Spring Cloud:Consul基础知识
一.基本概念 Consul是一套开源的分布式服务发现和配置管理系统,由HashiCorp公司用Go开发. 它提供微服务系统中的服务治理.配置中心.控制总线等功能. 服务发现:提供HTTP和DNS两种发 ...
- 太刺激了,面试官让我手写跳表,而我用两种实现方式吊打了TA!
前言 本文收录于专辑:http://dwz.win/HjK,点击解锁更多数据结构与算法的知识. 你好,我是彤哥. 上一节,我们一起学习了关于跳表的理论知识,相信通过上一节的学习,你一定可以给面试官完完 ...
- 记一次线上OOM问题分析与解决
一.问题情况 最近用户反映系统响应越来越慢,而且不是偶发性的慢.根据后台日志,可以看到系统已经有oom现象. 根据jdk自带的jconsole工具,可以监视到系统处于堵塞时期.cup占满,活动线程数持 ...
- Table内部实现2
这一节介绍Lua唯一的数据结构table,相对于大部分语言提供数组和字典两种类型,Lua将其合二为一,颇为精巧的实现了table. table充分体现了Lua语言的特点,用最简练的语法表达丰富的信息, ...
- pycharm写的代码提交到git上,提示需要merge失败时解决办法
当遇到pycharm代码提交需要合并报错时 原因:pycharm目录和git中目录冲突了 解决办法:1.先在git仓库中创建一个文件夹,比如day1 2.然后在pycharm中update一下,可以看 ...
- Docker添加TLS认证修复2375端口暴露引发的漏洞
#### 1.环境准备 ```bash# 查看Docker服务器主机名hostnamectl``` 
先介绍一个修改request请求参数值的方法吧 第一步: 拷贝完成后还需要配置一下: 先添加一个: 然后下一步: 最后点击OK,就可以开始操作request和response数据了 先修改reques ...