eclipse进行调试

编者注 :以下文章最初由Pawel Leszek于2003年5月撰写,并于2007年4月由Chris Aniszczyk更新。

Eclipse调试器和Debug视图

Eclipse SDK(特别是Java™开发工具(JDT)项目)具有内置的Java调试器,该调试器提供所有标准调试功能,包括执行步骤执行,设置断点和值,检查变量和值,以及挂起和恢复线程。 此外,您可以调试在远程计算机上运行的应用程序。 Eclipse平台非常健壮,其他编程语言可以将调试工具用于其各自的语言运行时。 正如您将在下面看到的,相同的Eclipse Debug视图也可用于C / C ++编程语言。

Eclipse Platform Workbench及其工具围绕JDT组件构建,该组件为Eclipse提供以下功能:

  • 项目管理工具
  • 观点和观点
  • 构建器,编辑器,搜索和构建功能
  • 调试器

Eclipse调试器本身是Eclipse中包含的一组标准插件。 Eclipse还具有一个特殊的Debug视图,该视图允许您管理Workbench中程序的调试或运行。 它显示您正在调试的每个目标的挂起线程的堆栈框架。 程序中的每个线程都显示为树中的一个节点,“调试”视图显示了正在运行的每个目标的进程。 如果线程被挂起,则其堆栈框架显示为子元素。

在开始使用Eclipse调试器之前,假定您已经安装了适当的Java SDK / JRE(我建议您使用Java VM V1.4)和Eclipse Platform SDK V3.3,并且两者都可以正常运行。 通常,最好先使用Eclipse示例测试调试选项。 如果要开发和调试C / C ++项目,则还需要获取并安装C / C ++开发工具(CDT)。 有关Java SDK / JRE,Eclipse平台和示例以及CDT的链接,请参阅参考资料 。 图1显示了Debug透视图的一般视图。

图1. Eclipse Debug透视图的一般视图

调试Java语言程序

在能够调试项目之前,需要对代码进行编译和干净地运行。 首先,您需要为应用程序创建运行配置,并确保其正确启动。 接下来,您需要使用“ 运行”>“调试”菜单以类似方式设置调试配置。 您还需要选择调试器用作主要Java类的类(请参见图2)。 您可以根据需要为单个项目设置尽可能多的调试配置。 启动调试器后(从Run> Debug ),它将在新窗口中打开,您可以开始调试了。

图2.在调试配置中设置项目的主要Java类

接下来,我们讨论Eclipse中的一些常见调试实践。

设置断点

当您启动应用程序进行调试时,Eclipse会自动切换到“调试”透视图。 毫无疑问,最常见的调试过程是设置断点,该断点将允许检查条件语句或循环中的变量和值。 要在Java透视图的Package Explorer视图中设置断点,请双击选定的源代码文件以在编辑器中将其打开。 浏览代码,然后将光标放在可疑代码所在行的标记栏上(沿着编辑器区域的左边缘)。 双击以设置断点。

图3.两个断点标记在编辑器的左边距中可见

现在,从“ 运行”>“调试”菜单开始调试会话。 重要的是不要将多个语句放在一行上,因为您不能跨过一行或在同一行上的多个语句上设置行断点。

图4.视图指示当前正在执行的行,左边距为箭头

还有一个方便的“断点”视图来管理所有断点。

图5.断点视图

条件断点

一旦知道错误发生的位置,您将希望在程序崩溃之前立即查看它在做什么。 一种方法是逐步遍历程序中的每条语句,一次到达问题点。 有时最好只运行一段代码然后在那一点上停止执行,这样您就可以在该位置检查数据了。 可以声明每当表达式的值更改时触发的条件断点(请参见图6)。 另外,键入条件表达式时,可以使用代码辅助。

图6.设置条件断点触发器

计算表达式

要在“调试”透视图中的编辑器中评估表达式,请选择设置断点的整行,然后从上下文菜单中,通过Ctrl + Shift + I或右键单击您感兴趣的变量来选择“检查”选项。参见图7)。 在当前堆栈框架的上下文中评估表达式,结果显示在“显示”窗口的“表达式”视图中。

图7.使用Inspect选项评估表达式

剪贴您的实时代码

Display视图允许您以剪贴簿类型的方式操作实时代码(参见图8)。 要操作变量,只需在“显示”视图中键入变量的名称,就会为您提供熟悉的内容帮助。

图8. Display视图

当调试器在断点处停止时,可以通过从Debug视图工具栏中选择Step Over选项来继续调试器会话(请参见图9)。 这将跨过突出显示的代码行,并以相同的方法在下一行继续执行(否则它将在调用当前方法的方法中继续执行)。 由于上一步而更改的变量以彩色突出显示(默认为黄色)。 可以在调试首选项页面中更改颜色。

图9.变量更改颜色

要在“调试”视图中挂起线程的执行,请选择一个正在运行的线程,然后在“调试”视图工具栏中单击“ 挂起 ”。 显示该线程的当前调用堆栈,并在编辑器的“调试”透视图中突出显示当前执行行。 当线程被挂起时,将光标放在Java编辑器中的变量上,并且该变量的值显示在一个小的悬停窗口中。 同样,线程的顶部堆栈框架被自动选择,并且该堆栈框架中的可见变量显示在“变量”视图中。 您可以通过单击变量名称在变量视图中检查其名称。

Hotswap错误修复:动态代码修复

如果您正在运行Java虚拟机(JVM)V1.4或更高版本,则Eclipse支持一种称为Hotswap Bug Fixing的功能(在JVM V1.3或更低版本中不可用)。 它允许在调试器会话期间更改源代码,这比退出应用程序,更改代码,重新编译然后再启动另一个调试会话要好。 要使用此功能,只需在编辑器中更改代码并恢复调试即可。 因为JVM V1.4与Java平台调试器体系结构(JPDA)兼容,所以此功能可用。 JPDA实现了在运行的应用程序中替换修改后的代码的功能。 当然,这在启动应用程序或导致失败的过程花费很长时间时特别有用。

如果完成调试后程序尚未完全执行,请从“调试”视图的上下文菜单中选择“终止”选项。 一个常见的错误是在调试器会话中使用“调试”或“运行”而不是“继续”。 这将启动另一个调试器会话,而不是继续当前会话。

远程调试

Eclipse调试器为调试远程应用程序提供了一个有趣的选项。 它可以连接到运行Java应用程序的远程VM,并将其自身附加到该应用程序。 使用远程调试会话在很大程度上类似于本地调试。 但是,远程调试配置需要在“ 运行”>“调试”窗口中进行不同的设置。 您需要首先在左侧视图中选择Remote Java Application条目,然后单击New 。 创建新的远程启动配置,并显示三个选项卡:“连接”,“源”和“公用”。

在“连接”选项卡的“项目”字段中,选择要用作启动参考(用于源代码查找)的项目。 在“连接”选项卡的“主机”字段中,键入运行Java程序的远程主机的IP地址或域名。 在“连接”选项卡的“端口”字段中,键入远程VM接受连接的端口。 通常,在启动远程VM时指定此端口。 当您希望调试器确定远程会话中是否可用“终止”命令时,请选择“允许终止远程VM”选项。 如果您希望能够终止要连接的VM,请选择此选项。 现在,当您选择“调试”选项时,调试器将尝试在指定的地址和端口连接到远程VM,结果将显示在“调试”视图中。

如果启动器无法连接到指定地址的VM,则会显示错误消息。 通常,远程调试功能的可用性严格取决于在远程主机上运行的Java VM。 图10显示了远程调试会话的连接属性设置。

图10.设置远程调试会话的连接属性

调试其他语言

尽管Java语言是Eclipse中使用最广泛的语言,但它是一个可扩展的平台,可以支持许多其他语言。 Eclipse通过C / C ++开发工具(CDT)项目支持C / C ++。 CDT通过调试C / C ++代码的功能扩展了标准的Eclipse Debug视图,并且CDT Debug视图使您可以在工作台中管理C / C ++项目的调试。 CDT不包括其内部调试器,但它为GNU GDB调试器提供了前端,该调试器必须在本地可用。 还有其他项目,例如PHP开发工具(PDT),它们提供了各自的调试器(请参见图11)。

图11. PHP调试器

结论

Eclipse平台提供具有标准调试功能的内置Java语言调试器,包括执行步骤执行,设置断点和值,检查变量和值以及挂起和恢复线程的能力。 它还可以用于调试在远程计算机上运行的应用程序。 Eclipse平台主要是Java开发环境,但是C / C ++,PHP和许多其他编程语言也可以使用相同的Eclipse Debug视图。

致谢

感谢Tyler Anderson创建了图11。


翻译自: https://www.ibm.com/developerworks/opensource/library/os-ecbug/index.html

eclipse进行调试

eclipse进行调试_使用Eclipse平台进行调试相关推荐

  1. c++工程 eclipse导入项目_在Eclipse中开发C/C++项目

    摘要:通过本文你将获得如何在Eclipse平台上开发C/C++项目的总体认识.虽然Eclipse主要被用来开发Java项目,但它的框架使得它很容易实现对其他开发语言的支持.在这篇文章里,你将学会如何使 ...

  2. eclipse创建神经网络_使用Eclipse Deeplearning4j构建简单的神经网络

    eclipse创建神经网络 神经网络导论 深度学习包含深度神经网络和深度强化学习,它们是机器学习的子集,而机器学习本身就是人工智能的子集. 广义地说,深度神经网络执行机器感知,该机器感知从原始数据中提 ...

  3. netbeans调试_从NetBeans运行和调试WildFly Swarm应用程序

    netbeans调试 使用NetBeans的Java EE开发人员习惯于直接在NetBeans所选择的应用程序服务器中运行和调试其瘦战应用程序. 在开发打包为über或镂空jars的微服务时,您期望使 ...

  4. java 安卓调试_【转】Android 调试技术

    一.JAVA层单步调试 二.Native层单步调试 三.JAVA层堆栈打印 1. 在指定的函数内打印相关java调用 Log.d(TAG,Log.getStackTraceString(new Thr ...

  5. electron 打开调试_【Electron】Electron 调试

    electron有主进程和渲染进程,所以调试部分也分为两大块,即调试主进程和渲染进程 一.调试渲染进程 调试渲染进程和调试浏览器的方法基本差不多.在运行electron 应用之后可以通过下面两种方式打 ...

  6. eclipse java 程序调试_使用 Eclipse 调试 Java 程序的 10 个技巧

    - 友好的可读的对象 变量视图是使用对象的toString方法来现实对应的值.因为这个原因,如果提供友好的toString方法实现,对调试来说会非常有用.在javadoc中关于java.lang.Ob ...

  7. eclipse 插件教程_编写Eclipse插件教程–第1部分

    eclipse 插件教程 Eclipse是三个最受欢迎的Java开发IDE之一. 其成功的原因之一是其可扩展性. 对于任何知道该怎么做并且已经做到的人来说,编写eclipse插件都可以非常轻松快捷. ...

  8. as真机调试_如何使用真机调试android程序

    展开全部 第一步:将我们开发所用的Android真机的USB调试功能打开(打开方法为Settings(设置32313133353236313431303231363533e59b9ee7ad94313 ...

  9. spyder python调试_使用spyder编译器单步调试python

    1.将需要进行单步调试的函数在脚本中进行调用(十分重要的一步).由于python是解释型语言,在进行单步调试的时候需要告诉系统你使用了这个函数,单步调试才会进入你所需要调式的函数.如下图所示,我们定义 ...

最新文章

  1. Android Service(7)--完结篇
  2. [转]编程语言中的 鸭子模型(duck typing)
  3. 一步一步学Silverlight 2系列(4):鼠标事件处理
  4. 天津市职高高一计算机试题及答案,职高(中职)数学(基础模块)上册题库.doc
  5. mysql操作数据库
  6. 牛逼!计算机基础知识总结与操作系统 PDF 开放下载了!
  7. [转]:tbox中数据库的使用
  8. Out of memory error : GC overhead limit exceeded
  9. 湖南师范大学2018年大学生程序设计竞赛新生赛 A 齐神和心美的游戏【hash】
  10. 如何将文件夹打成jar包
  11. java根据cookie统计uv,利用Cookie统计UV流量 | 学步园
  12. Android仿iOS左右滑动开关控件(Android4.0以上适用)
  13. 一文教会你使用R语言和基本统计分析
  14. 转:一位10年Java工作经验的架构师聊Java和工作经验
  15. REDHAT版本与支持的intel CPU型号
  16. csdn前200的大牛
  17. 浏览器主页被劫持篡改为hao123或者别的网页解决方法
  18. http 阮一峰_JavaScript 标准参考教程(alpha) 阮一峰
  19. Java 使用POI 给Word添加水印
  20. 路由器dns服务器为空,家用路由器设置里的DNS服务器是什么?有什么作用呢?

热门文章

  1. airodump-ng的使用及显示
  2. dubbo学习之源码
  3. wow(1) : UI插件_EUI[1]_配置分享
  4. Android——layout中使用include复用模块
  5. 复制虚拟机后需要改的地方
  6. excel自动筛选_具有范围内条件的Excel自动筛选
  7. excel自动筛选_自动更改Excel筛选器标题
  8. JAVA基础学习(十五)--集合二--TreeSet和泛型
  9. Dynamic Refinement Network for Oriented and Densely Packed Object Detection
  10. Densely Connected Convolutional Networks 密集连接卷积网络