Eclipse中Debug调试及视图.docx
- 文档编号:17666180
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:12
- 大小:1.01MB
Eclipse中Debug调试及视图.docx
《Eclipse中Debug调试及视图.docx》由会员分享,可在线阅读,更多相关《Eclipse中Debug调试及视图.docx(12页珍藏版)》请在冰点文库上搜索。
Eclipse中Debug调试及视图
Eclipse调试器和Debug视图
编者注:
PawelLeszek最初于2003年5月撰写了下文,后来由ChrisAniszczyk于2007年4月进行了更新。
EclipseSDK是针对Java™开发工具(Java™DevelopmentTools,JDT)的项目,它具有一个内置的Java调试器,可以提供所有标准的调试功能,包括分步执行、设置断点和值、检查变量和值、挂起和恢复线程的功能。
除此之外,还可以调试远程机器上运行的应用程序。
Eclipse平台很健壮,因为其他编程语言可以将该平台提供的调试工具用于各自的语言运行时。
正如下文所示,同一个EclipseDebug视图也可以用于C/C++编程语言。
Eclipse平台工作台及其工具是围绕JDT组件构建的,该组件为Eclipse提供了下列特性:
∙项目管理工具
∙透视图和视图
∙构造器、编辑器、搜索和构建功能
∙调试器
Eclipse调试器本身是Eclipse内的一个标准插件集。
Eclipse还有一个特殊的Debug视图,用于在工作台中管理程序的调试或运行。
它可以显示每个调试目标中挂起线程的堆栈框架。
程序中的每个线程都显示为树中的一个节点,Debug视图显示了每个运行目标的进程。
如果某个线程处于挂起状态,其堆栈框架显示为子元素。
在使用Eclipse调试器之前,假定您已经安装了合适的JavaSDK/JRE(我推荐使用JavaVMV1.4)和EclipsePlatformSDKV3.3,而且两者的运行都没问题。
一般来说,先用Eclipse示例测试一下调试选项比较好。
如果想开发和调试C/C++项目,还需要获得并安装C/C++开发工具(C/C++DevelopmentTools,CDT)。
关于JavaSDK/JRE、Eclipse平台和示例以及CDT,请参阅参考资源。
图1显示了Debug透视图的一般视图。
图1.EclipseDebug透视图的一般视图
调试Java语言程序
在可以调试项目前,需要干净地编译和运行代码。
首先,需要为应用程序创建一个运行配置,确保应用程序可以正确启动。
然后,需要通过Run>Debug菜单以类似的方式设置调试配置。
还需要选择一个类,将它作为调试的主Java类来使用(请参见图2)。
您可以按照自己的意愿为单个项目设置多个调试配置。
当调试器启动时(从Run>Debug),会在一个新的窗口中打开,这时就可以开始调试了。
图2.在调试配置中设置项目的主Java类
接下来,将讨论Eclipse中的一些常用调试实践。
设置断点
在启动应用程序进行调试时,Eclipse会自动切换到Debug透视图。
毫无疑问,最常见的调试步骤是设置断点,这样可以检查条件语句或循环内的变量和值。
要在Java透视图的PackageExplorer视图中设置断点,双击选择的源代码文件,在一个编辑器中打开它。
遍历代码,将鼠标放在可疑代码一行的标记栏(在编辑器区域的左侧)上,双击即可设置断点。
图3.编辑器左侧看到的两个断点
现在,从Run>Debug菜单启动调试会话。
最好不要将多条语句放在一行上,因为会无法单步执行,也不能为同一行上的多条语句设置行断点。
图4.视图中左侧空白处的箭头指示当前正在执行的行
还有一个方便的断点视图来管理所有的断点。
图5.断点视图
条件断点
一旦了解到错误发生的位置,您可能想要知道在程序崩溃之前,程序在做什么。
一种方法就是单步执行程序的每行语句。
一次执行一行,直到运行到可疑的那行代码。
有时,最好只运行一段代码,在可疑代码处停止运行,在这个位置检查数据。
还可以声明条件断点,它在表达式值发生变化时触发(请参见图6)。
除此之外,在输入条件表达式时,也可以使用代码帮助。
图6.设置条件断点触发器
计算表达式的值
为了在Debug透视图的编辑器中计算表达式的值,选择设置了断点的那行代码,在上下文菜单中,通过Ctrl+Shift+I或右键单击您感兴趣的变量(参见图7)选择Inspect选项。
在当前堆栈框架的上下文中会计算表达式的值,在Display窗口的Expressions视图中会显示结果。
图7.通过Inspect选项计算表达式的值
剪切活动代码
Display视图允许您以剪切类型的方式处理活动代码(参见图8)。
要处理一个变量,在Display视图中输入变量名即可,视图会提示您一个熟悉的内容助手。
图8.Display视图
当调试器停止在一个断点处时,您可以从Debug视图工具栏(参见图9)中选择StepOver选项,继续调试器会话。
该操作会越过高亮显示的那行代码,继续执行同一方法中的下一行代码(或者继续执行调用当前方法的那个方法的下一行代码)。
执行上一步后发生改变的变量会用某种颜色高亮显示(默认是黄色)。
颜色可以在调试首选项页面中改变。
图9.改变颜色的变量
要在Debug视图中挂起执行线程,选择一个运行线程,单击Debug视图工具栏中的Suspend。
该线程的当前调用堆栈就会显示出来,当前执行的代码行就会在Debug透视图中的编辑器中高亮显示。
挂起一个线程时,将鼠标放在Java编辑器中的变量上,该变量的值就会在一个小的悬停窗口中显示出来。
此时,该线程的顶部堆栈框架也会自动选中,其中的可视变量也会在Variables视图中显示出来。
您可以通过单击Variables视图中合适的变量名来检查变量。
热交换错误修正:
动态代码修正
如果运行的是Java虚拟机(JavaVirtualMachine,JVM)V1.4或更高的版本,Eclipse支持一个叫做热交换错误修正(HotswapBugFixing)的功能,JVMV1.3或更低的版本不支持该功能。
该功能允许在调试器会话中改变源代码,这比退出应用程序、更改代码、重新编译、然后启动另一个调试会话更好。
要利用该功能,在编辑器中更改代码后重新调试即可。
由于JVMV1.4与Java平台调试器架构(JavaPlatformDebuggerArchitecture,JPDA)兼容,所以才有可能具备该功能。
JPDA实现了在运行的应用程序中替换经过修改的代码的功能。
如果应用程序启动时间较长或执行到程序失败的地方时间很长,那么这一点特别有用。
如果在完成调试时,程序还没有全部执行一遍,在Debug视图的上下文菜单中选择Terminate选项。
容易犯的一个错误是在调试器会话中使用Debug或Run,而不是Resume。
这样做会启动另一个调试器会话,而不是继续当前会话。
回页首
远程调试
Eclipse调试器提供了一个有趣的选项,可以调试远程应用程序。
它可以连接到一个运行Java应用程序的远程VM,将自己连接到该应用程序上去。
使用远程调试会话与使用本地调试会话大致相同。
但是,远程调试配置需要在Run>Debug窗口中配置一些不同的设置。
需要在左侧视图中先选择RemoteJavaApplication选项,然后单击New。
这样就创建了一个新的远程启动配置,会显示出三个选项卡:
Connect、Source和Common。
在Connect选项卡的Project字段,选择在启动搜索源代码时要引用的项目。
在Connect选项卡的Host字段,输入运行Java程序的远程主机的IP地址或域名。
在Connect选项卡的Port字段,输入远程VM接收连接的端口。
通常,该端口在启动远程VM时指定。
如果想让调试器决定在远程会话中Terminate命令是否可用,可以选择AllowterminationofremoteVM选项。
如果希望可以终止连接的VM,则选择该选项。
现在,在您选择Debug选项时,调试器会尝试连接到指定地址或端口的远程VM,结果会在Debug视图中显示出来。
如果启动程序不能连接到指定地址的VM,会出现一条错误信息。
通常来说,是否可以使用远程调试功能完全取决于远程主机上运行的JavaVM。
图10显示了一个远程调试会话的连接属性设置。
图10.设置一个远程调试会话的连接属性
回页首
调试其他语言
尽管Java语言是Eclipse使用的最广泛的语言,但是Eclipse是一个可扩展的平台,可以支持许多其他的语言。
Eclipse可以通过C/C++开发工具(CDT)支持C/C++。
CDT扩展了标准的EclipseDebug视图,添加了调试C/C++代码的功能,CDTDebug视图可以在工作台中管理C/C++项目的调试过程。
CDT中没有内部的调试器,但是它提供了一个GNUGDB调试器的前端,该调试器必须在本地可用。
还有其他项目可以提供各自的调试器,例如PHP开发工具(PHPDevelopmentTools,PDT),请参见图11。
图11.PHP调试器
回页首
结束语
Eclipse平台提供了一个内置Java语言调试器,它带有标准的调试功能,包括分步执行、设置断点和值、检查变量和值以及挂起和恢复线程功能。
它还可以用来调试运行在远程机器上的应用程序。
Eclipse平台主要是一个Java开发环境,但是其中的EclipseDebug视图还可以用于C/C++、PHP和许多其他的编程语言。
回页首
致谢
感谢TylerAnderson绘制了图11。
参考资料
学习
∙您可以参阅本文在developerWorks全球站点上的英文原文。
∙访问Eclipse.org获得关于程序及其使用的全面信息。
∙访问PlanetEclipse.org随时了解Eclipse社区的变化。
∙从Eclipse.org的CDT项目了解C/C++开发工具。
∙查看AjaxToolsFramework(ATF)flash页面和项目页面,了解JavaScript调试。
∙通过这份EclipseCon教程了解EclipseDebugFramework的知识。
∙查看“Eclipse推荐阅读清单”。
∙浏览developerWorks上所有的Eclipse文章和教程。
∙Eclipse的新用户应该从这里查看Eclipse新手入门。
∙查看IBMdeveloperWorks的Eclipse项目资源中心,扩展您的Eclipse技能。
∙要收听针对软件开发人员的有趣访谈和讨论,请查看developerWorkspodcasts。
∙要获得Eclipse平台的介绍,请参阅“GettingstartedwiththeEclipsePlatform”。
∙随时关注developerWorks的技术事件和网络广播。
∙查看全球范围内面向IBM开放源码开发人员的即将举行的会议、商业展览、网络广播和其他活动。
∙访问developerWorks开放源码技术专区,提供了大量的how-to信息、工具和项目更新,帮助您使用开源技术进行开发,并与IBM产品结合使用。
获得产品和技术
∙在IBMalphaWorks查看最新的Eclipse技术下载。
∙下载IBM产品评估版本,开始使用来自DB2®、Lotus®、Rational®、Tivoli®和WebSphere®的应用程序开发工具和中间件产品。
∙使用IBM试用软件创建您的下一个开放源码开发项目,可通过下载或从DVD中获得。
讨论
∙查看EclipseCDT新闻组,了解有关C/C++调试的开发帮助。
(选择该链接将启动默认的Usenet新闻阅读器应用程序,并打开eclipse.tools.cdt。
)
∙查看EclipseATFnewsgroups,了解有关JavaScript调试的开发帮助。
(选择该链接将启动默认的Usenet新闻阅读器应用程序,并打开eclipse.webtools.atf。
)
∙查看Eclipseplatformnewsgroups,提出有关调试以及Eclipse平台方面的问题。
(选择该链接将启动默认的Usenet新闻阅读器应用程序,并打开eclipse.platform。
)
∙EclipsePlatformnewsgroups应该是您讨论有关Eclipse问题的第一站。
(选择该链接将启动默认的Usenet新闻阅读器应用程序,并打开eclipse.platform。
)
∙Eclipsenewsgroups为对使用和扩展Eclipse感兴趣的人员提供了大量参考资料。
∙通过参与developerWorksblogs加入developerWorks社区。
作者简介
ChrisAniszczyk是IBMLotus的一名软件工程师,致力于与OSGi相关的开发。
他是一个开放源码的爱好者,致力于GentooLinux发行版的工作,同时还是一些Eclipse项目(PDE,ECF,EMFT)的提交者。
您可以随时与他讨论关于开放源码和Eclipse的问题。
PawelLeszek是StudioB的一名作家,他是一位专长于Linux/Win/MacOS系统体系结构和管理的独立软件顾问和作家。
他具有许多操作系统、编程语言和网络协议方面的经验,尤其是LotusDomino和DB2方面的经验。
Pawel还是LinuxWorld上一系列文章的作者,以及PCWorld波兰版的Linux专栏作家。
Pawel和他妻子以及可爱的小女儿住在华沙。
欢迎提问并提出意见;您可以直接给作者发电子邮件(pawel.leszek@ipgate.pl)。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Eclipse Debug 调试 视图