Eclipse 调试器:零距离接触实战技巧

  次阅读 作者:智能小宝 来源:互联网 2016-01-14 14:47 我要评论(0)

调试的方法虽然千千万万,但归根结底,就是找到引发错误的代码。Eclipse调试器的目标是让程序员能对本地或远程程序进行错误侦测与诊断。

调试的方法虽然千千万万,但归根结底,就是找到引发错误的代码。Eclipse调试器的目标是让程序员能对本地或远程程序进行错误侦测与诊断。该调试器提 供所有标准调试功能,包括进行单步执行、设置断点和值、检查变量和值以及暂挂和恢复线程的能力。这篇文章主要讲述Eclipse调试器,包括Debug视 图,断点的设置,Java代码的调试等等。与一些理论性较强的文章相比,本文更注重实践,为读者提供更加使用的调试技巧。

Eclipse 调试器

Eclipse 平台的最大特色是插件化(Plugin)。调试是任何程序员都无法回避的工作。因此Eclipse的内置插件Java开发工具包(Java Development Toolkit,简称JDT)中集成了一个功能强大的Java调试器(Debugger)。实际上,JDT是Eclipse工作平台(Eclipse Platform Workbench)的基础工具,除了调试器,还提供透视图、视图、编辑器、搜索等Eclipse基础功能。

由于Eclipse调试器采用了基于客户端/服务器的设计模式,远程应用的调试变得与本地一样简单。其工作原理是,本地Eclipse工作平台充当调试的客户端,而远程应用所在的机器则充当了调试服务器的角色。

Debug 视图

Debug视图作为Eclipse调试器透视图的一部分,管理与程序调试相关的功能。如图所示,Debug视图呈树状结构,每一个线程对应一树节点。图中显示的是暂挂线程Main的调试堆栈帧结构。

作为标准的Java调试平台,Debug视图提供了许多执行控制命令(Execution Control Commands),用于在程序中设置/取消断点,单步执行,暂挂与恢复线程。以下是一些常用的执行控制命令:

1. Layout布局

Debug视图的布局与断点调试等主体功能相比,显得并不那么乍眼,因此也常被人忽略,不过Eclipse的魅力之一就是它的细节做的特别完美。我们简单介绍一下Debug视图布局的特点,如图所示。

第一个特点是Automatic功能。选择菜单选项Layout -> Automatic,可以实现Debug视图在树状模式与Breadrumb模式之间的自动互换。相信很多编程人员都喜欢Breadrumb模式,向面包片一样,一层一层的,直观,醒目。

Layout菜单的第二个特点Breadrumb模式。选择菜单选项Layout -> Breadcrumb,打开Breadrumb模式。除此之外,选择菜单选项Layout -> Auto-Expand Breadcrumb,可实现自动展开Breadrumb模式。当选择下拉框时,可自动定位到暂挂线程的调试堆栈郑这个细节对于编程人员来说,也是非常 的方便。

2. 调试启动停止等相关命令

Debug视图提供了诸多的启停控制命令,叫法上与其它的调试器可能稍微有些不同,具体如下:

启动调试视图:Eclipse提供三种方式来启动程序(Launch)的调试,分别是通过菜单(Run –> Debug)、图标(“绿色臭虫”)以及快捷键(F11),在这一点上,与其他命令(例如Run)类似。

停止调试:Eclipse通过Terminate命令终止对本地程序的调试。特别的,对于远程程序的调试,Eclipse使用 Disconnect命令来终止与远程JVM的socket连接。前面我们谈到,Eclipse调试器采用了基于客户端/服务器的设计模式,本地 Eclipse工作平台充当调试的客户端,而远程应用所在的JVM则充当了调试服务器的角色。简单的说,Terminate命令终止本地调 试,Disconnect命令终止远程调试。Terminate/Disconnect All终止所有的调试,包括本地与远程。

重新启动调试:Eclipse通过Relaunch命令重新启动调试。这里需要指出的是Relaunch支持两种重启动模式,一种是针对已经停止的程序调 试,另一种是针对Active的当程序调试。前者不难理解,效果上等同于Terminate+Launch。后者的处理方式有些不同,效果上则等同于 Launch一个新的Debug项。实际上,针对后一种情况,我们通常采用Eclipse的Terminate and Relaunch命令来达到重启Debug的目的。

删除调试项:Eclipse支持针对多个程序的调试。我们称每一项对应一个Debug Item。Remove命令将某一个Debug Item从当前的Debug视图中删除。不过,Remove命令只适用于已停止的Debug Item,而对于运行中的Debug Item,Eclipse提供了Terminate and Remove命令。假如想停止并清除所有的Debug Item,则可以通过Terminate and Remove All命令。此外,Eclipse还提供了Copy Stack命令或者快捷键Ctr+C,可将调试堆栈帧内容拷贝至剪贴板中,这样效果上就等同于“撤销”。

以上这些命令虽然有些琐碎,但是非常能反映Eclipse对细节的把握与控制。

3. 单步执行

相信任何调试人员对单步调试非常的熟悉。Eclipse提供step into、step over、 step return三个命令来支持单步调试。三者的具体区别是:step into(快捷键F5)就是单步执行,遇到子函数就进入并且继续单步执行;step over(快捷键F6)是在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止,也就是把子函数整个作为一步。 step return(快捷键F7)就是单步执行到子函数内时,用step return就可以执行完子函数余下部分,并返回到上一层函数。说的通俗点就是,step into:进入子函数,step over:越过子函数,但子函数会执行,step return:跳出子函数。

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...