Eclipse开发Java如何Debug详解

2022年6月10日12:15:37

写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域,如今终有小成,愿将昔日所获与大家交流一二,希望对学习路上的你有所助益。同时,博主也想通过此次尝试打造一个完善的技术图书馆,任何与文章技术点有关的异常、错误、注意事项均会在末尾列出,欢迎大家通过各种方式提供素材。

  • 对于文章中出现的任何错误请大家批评指出,一定及时修改。
  • 有任何想要讨论和学习的问题可联系我:zhuyc@vip.163.com。
  • 发布文章的风格因专栏而异,均自成体系,不足之处请大家指正。

Java如何Debug - Eclipse

本文关键字:Java、Debug、程序调试、Eclipse

应粉丝群小伙伴的请求,更新一篇与Debug相关的文章。小编觉得掌握工具的使用是比较容易的,更加重要的是程序调试的思路,所以在这篇文章中会尽量全面的和大家讲解一下程序调试的流程以及如何使用Eclipse进行Debug。
大家如果有任何问题也欢迎扫码加入文末的CSDN官方粉丝群,小编会尽自己所能优先创作大家想看的内容。

一、什么是程序调试

1. bug与debug

  • bug

bug的本意是虫子,为什么现在用来代表计算机或软件中发生的错误你?这还要从一只飞蛾说起:

早在1947年,当时的计算机还不能算作真正的电子计算机,其中使用了大量的继电器。上图中的人物就是大名鼎鼎的格蕾斯·哈珀(GraceHopper),在9月9号这一天,一台名为“MARK II”型的计算机死机了,最后定位到70号继电器出错。观察继电器后发现,一只虫虫飞了进去,并且已经触电身亡。
于是,这个bug就被记录下来,成为了第一个导致计算机出现问题的记录。在这之后在越来越多的领域都使用bug这个词汇来代表出现的问题或错误,游戏中的漏洞或错误也是使用这一单词。

  • debug

对于开发者来说,工作就是通过程序来实现需要的业务逻辑(也就是指定功能)。在实现的过程中会遇到各种各样的问题,debug的本意是解决这些bug,主要的方式就是程序调试。现在一说到debug指的就是在调试模式下运行程序或项目,这也是我们调试的前提。

2. debug的具体方式

说起debug,需要明确一点的是,我们使用的编译器(如Eclipse,IDEA等)只是用可视化的方式将程序的调试过程变得更加直观和方便。不但能够调试模式运行,还能够查看到变量信息,堆栈信息等。本质上是因为语言本身就支持了调试功能,换句话说,如果你是高手中的高手,紧紧使用各种命令同样能够完成程序调试。
所以小编想说的就是调试的思想和流程比工具更为重要,希望大家不要可以记忆某一个工具对于程序的调试方法,而是能够提炼出通用的步骤。当然,小编也会尽力总结和具体讲解主流工具调试程序的过程,如果有任何疑问也欢迎大家指出。
在Java中,和程序调试相关的命令可以统称为jdb,其中包含了设置断点查看堆栈信息查看相关类详细信息方法跟踪等等。这些功能也是我们进行程序调试时必须掌握和经常使用的,在后文中会为大家具体讲解如何在编译器中进行程序调试,对命令调试感兴趣的小伙伴可以自行搜索。

二、程序调试流程

明白了程序调试的目的和基本概念后,我们先来梳理一下简单流程,可以让我们在使用工具时更加得心应手。

1. 问题定位

首先第一步要做的是定位问题发生的位置。
最简单的情况是单个运行的程序直接出现了异常信息,并且指明了报错行。如果我们检查了相关代码后仍然无法修正错误,此时可以直接考虑在出错位置附近开始调试。
稍微复杂一点的情况是单个程序运行的结果与预期不符,但却没有报错信息。这种情况是我们的代码出现了逻辑错误,虽然不影响程序的运行,但是却未实现我们想要的功能,此时也需要借助程序调试来排查错误,重点排查所传的参数与核心代码的部分。
较为复杂的情况是在大型项目中遇到了功能异常,此时问题的定位更为重要,但是同样可以使用以上两种情况的方法来解决。对于此类问题,可以将问题出现的位置大致划定为以下几个部分:前端功能调用与数据解析前后端数据交互服务端业务逻辑与项目配置持久层数据交互。如果结构较为复杂可能还会存在缓存层分布式架构,但是问题定位的方式大同小异,会在后面的文章中说明。

2. 设置断点

在确定了问题后,需要做的就是在对应的代码部分设置断点,这一步比较简单。如果使用编译器的话,只需要在相应代码行的位置双击(Eclipse等工具)或单击(IDEA等工具)。

3. 程序调试

设置好断点以后,只需要以调试模式启动程序或运行项目即可。当代码执行到了设置断点的地方后,会切换到Debug视图。在Debug视图下,我们可以查看堆栈信息,包括变量值的变化、方法调用信息。并且还可以方便的跟踪循环、递归等结构每次执行的效果,对于集合类型的数据变化也是一目了然。

三、Eclipse下的程序调试

下面来讲解一下在Eclipse中如何进行程序调试。

1. debug视图

首先注意到,当打开Eclipse时,默认处在Java视图Java EE视图,可以在右上角查看到。
Eclipse开发Java如何Debug详解
当我们第一次使用Debug功能时,会提示我们是否切换到Debug视图,也就是上图中小虫子的标志。切换视图的方法也很简单,只要点击对应的图标按钮就可以了,Eclipse的操作界面也会随之发生变化。
讲解Debug视图的原因是防止大家在进入Debug后不知道怎么返回,我们也可以手动将Debug视图添加到右上角的区域。点击Open perspective按钮,如下图所示:
Eclipse开发Java如何Debug详解

2. debug模式运行

想让程序在调试模式下运行只需要将原来的run改为debug即可。

  • 快捷键运行

Eclipse开发Java如何Debug详解

  • 右键运行

Eclipse开发Java如何Debug详解

  • 项目运行

Eclipse开发Java如何Debug详解
进入debug运行模式后,可以根据需要随时增加和取消断点。

3. debug视图功能窗口

debug视图默认的功能窗口按如下分布,可以分为四个部分。每个部分的名字是小编自己总结的,理解作用就好。
Eclipse开发Java如何Debug详解

(1)堆栈信息区

在这个区域中可以查看到线程堆栈的相关信息,我们在这一区域的做的操作主要通过右键菜单选项或者上方的快捷功能按钮来实现。
Eclipse开发Java如何Debug详解

  • F5:进入当前方法(Step Into),也就是向下深入一层,查看具体执行的代码
  • F6:运行下一行代码(Step Over),也就是跨过当前行,继续调试后面的部分
  • F7:退出当前方法(Step Return),也就是向上一层,返回到调用的位置
  • F8:程序继续运行直到下一个断点(Resume),当想要快速跳过后续代码调试过程或者跳转到下一个断点位置时使用
  • Terminate:直接终止程序运行,在运行模式下也可以使用这个按钮
  • Use Step Filters:如果在程序调试的过程中想要忽略一些不关注的内容时,可以使用这个过滤器进行过滤。这个功能按钮只是过滤器的开关,具体的规则需要到Windows -> Preferences -> Java -> Debug -> Step Filtering中进行配置

(2)程序代码区

Eclipse开发Java如何Debug详解
在程序代码区中,底色为绿色的代码行为即将要执行的代码行。并且在该区域中,已经执行过的代码行中变量的值,可以通过鼠标进行预览查看。

(3)观察操作区

观察操作区主要可以分为三个视窗:变量窗口,断点窗口,表达式窗口。

  • 变量

Eclipse开发Java如何Debug详解
在这个窗口中可以查看已经运行过的代码中出现的变量的值,对于集合类型可以展开查看。
Change Value:可以在调试过程中根据需要动态修改变量的值,也可以在右侧的Value部分直接修改
All References:查看与该变量所有相关的引用(变量)信息
All Instances:查看所有该变量类型的所有实例
Instance Count:查看该变量类型的所有实例个数
Inspect:查看选择的变量的值,将出现在表达式窗口

  • 断点

Eclipse开发Java如何Debug详解
断点窗口中可以开启和关闭已经设置的断点,也可以完全删除,上方的快捷功能按钮可以在多选后进行批量操作。

  • 表达式

Eclipse开发Java如何Debug详解
在表达式窗口中,可以添加想要查看的变量(通过变量窗口的Inspect功能或者直接输入变量名称均可),还可以执行各种运算或者调用API获得返回结果,回车后直接执行。

(4)脚本调试区

在脚本调试区,可以写大段的代码,在进行项目调试时是绝对的利器。可以将选中的内容以表达式的形式记录在视图窗口(Watch按钮),也可以直接执行代码来查看结果,如下图所示:
Eclipse开发Java如何Debug详解

在这个区域中可以调用已经出现的变量,也可以定义新的变量,调用各种API,最后一个表达式最为想要查看的内容即可,可以是一个变量名称,也可以是一个方法调用。只需要选中代码,然后右键选择Display即可。

  • 作者:一头小山猪
  • 原文链接:https://sandtower.blog.csdn.net/article/details/119994374
    更新时间:2022年6月10日12:15:37 ,共 3643 字。