Eclipse+调试及Debug+新手教程.docx

上传人:b****8 文档编号:29986816 上传时间:2023-08-04 格式:DOCX 页数:18 大小:1,021.66KB
下载 相关 举报
Eclipse+调试及Debug+新手教程.docx_第1页
第1页 / 共18页
Eclipse+调试及Debug+新手教程.docx_第2页
第2页 / 共18页
Eclipse+调试及Debug+新手教程.docx_第3页
第3页 / 共18页
Eclipse+调试及Debug+新手教程.docx_第4页
第4页 / 共18页
Eclipse+调试及Debug+新手教程.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

Eclipse+调试及Debug+新手教程.docx

《Eclipse+调试及Debug+新手教程.docx》由会员分享,可在线阅读,更多相关《Eclipse+调试及Debug+新手教程.docx(18页珍藏版)》请在冰豆网上搜索。

Eclipse+调试及Debug+新手教程.docx

Eclipse+调试及Debug+新手教程

网摘一

调试是程序员无法回避的工作。

调试方法有许多种,但归根结底,就是找到引发错误的代码。

举例来说,在 Linux 应用程序中,分段故障被认为是最常见的错误之一。

当程序尝试访问未分配给它的内存并因为分段违例而终止时,将产生这种错误。

要修正这种错误,您需要找到引发该行为的那行代码。

一旦找到有问题的代码行,这对于知道引发错误的上下文及其相关的值、变量和方法也是有所帮助的。

使用调试器将使查找这些信息变得相当简单。

Eclipse 调试器及 Debug 视图

Eclipse 平台的特色在于内置了 Java 调试器,该调试器提供所有标准调试功能,包括进行单步执行、设置断点和值、检查变量和值以及暂挂和恢复线程的能力。

此外,您还可以调试在远程机器上运行的应用程序。

Eclipse 平台主要是一个 Java 开发环境,但其体系结构同时也向其它编程语言开放。

如以下您将看到的,同一个 Eclipse 的 Debug 视图也可用于 C和 C++ 编程语言。

Eclipse 平台工作台(EclipsePlatformWorkbench)及其工具是基于 Java 开发工具(JDT)组件所构建的。

这些组件向 Eclipse 提供以下功能:

∙         项目管理工具

∙         透视图和视图

∙         构建器、编辑器、搜索和构建功能

∙         调试器

Eclipse 调试器本身是作为 Eclipse 二进制文件中包含的标准插件而存在的。

Eclipse 还有一个特别的 Debug 视图,允许您在工作台中管理程序的调试和运行。

它为调试中的每个目标显示其暂挂线程的堆栈帧。

程序中的各个线程以作为树的节点出现,而 Debug 视图则显示运行中的各目标的进程。

如果暂挂一个线程,则其堆栈帧显示为子元素。

在您开始使用 Eclipse 调试器之前,假定您已经安装了适当的 JavaSDK/JRE(我推荐您使用 JavaVM1.4)和 Eclipse 平台 SDK2.0/2.1,且两者都工作正常。

一般来说,先使用 Eclipse 样本来测试一下调试选项是一个好主意。

如果您要开发和调试 C/C++ 项目,您还需要得到并安装 C/C++ 开发工具(C/C++DevelopmentTool,CDT)。

有关 JavaSDK/JRE、Eclipse 平台和样本以及 CDT 的链接,请参阅本文后面的 参考资料。

 图 1显示了 Debug 用户界面的常规视图。

图 1.EclipseDebug 视图用户界面的常规视图 

 

调试 Java

在您能调试您的项目之前,需要先完整地编译和运行代码。

您首先需要为您的应用程序创建运行配置并确认其正常启动。

之后,您需要使用 Run>Debug...菜单,以同样的方式设置调试配置。

您还需要选择作为主 Java 类的由调试器使用的类(也请参阅 图 2)。

对一个项目,您希望有几种调试配置就可以有几种。

当调试器启动后(通过 Run>Debug...),会在一个新窗口打开它,您可以准备开始调试。

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

以下是最常见的 Eclipse 调试操作的示例指示信息:

设置断点

当您启动应用程序以进行调试时,Eclipse 自动切换到 Debug 透视图。

无庸置疑,最常见的调试过程就是设置断点,以允许检查在条件语句和循环中的变量和值。

要在 Java 透视图的 PackageExplorer 视图中设置断点,双击所选的源代码文件,在编辑器中打开它。

遍历全部代码,将光标放置在含有可疑代码的那一行的标记栏上(在编辑器区域的左侧)。

双击以设置断点(也请参阅 图 3)。

图 3. 在编辑器左侧边缘可看到两个断点标记 

现在通过 Run>Debug...菜单启动调试会话。

有一点很重要,不要把数条语句放在同一行,因为您不能在同一行的多条语句上单步跳过或设置行断点(也请参阅 图 4)。

图 4. 视图通过左侧边缘的箭头指出当前正在执行的行 

条件断点

一旦您找到出错的地方,您会想要了解在崩溃前程序在干些什么。

完成该工作的一种方法是单步执行程序中的每条语句,一次一句,直到到达出问题的地方。

有时候更好的方法是仅运行某段代码并在出问题的地方终止其执行,这样就可以检查该位置上的数据。

要实现这一点,可能要声明每当表达式的值更改时就被触发的条件断点(请参阅 图 5)。

此外,在输入条件表达式时还可以使用代码辅助。

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

对表达式求值

要在 Debug 透视图的编辑器中求表达式的值,选中设置有断点的一整行,并在上下文菜单中选择 Inspect 选项(请参阅 图 6)。

表达式是在当前堆栈帧的上下文中求值的,其结果显示在 Display 窗口的 Expressions 视图中。

图 6. 用 Inspect 选项求表达式的值 

查看变量

Variables 视图(在 Display 窗口中)显示了选中的堆栈帧中的变量值(请参阅 图 7)。

要查看所请求的变量,只需展开 Variables 视图中的树直到您看到所请求的元素为止。

您也可以在 Debug 视图中单步执行代码的同时,在 Variables 视图中查看变量。

图 7. 在 Display 窗口中查看变量 

当调试器在断点上停止时,您可以通过在 Run>Debug...菜单上选择 StepOver 选项来继续调试器会话(请参阅 图 8)。

这将单步跳过突出显示的代码行并执行同一个方法中的下一行(或者它在调用当前方法的方法中继续)。

作为最后一步的结果而发生更改的变量用颜色突出显示(缺省值是红色),所用颜色可在“ChangedVariableValueColor”首选项(由 DebugVariableViews 指定)中指定。

图 8.Run... 菜单中的调试器命令 

要在 Debug 视图中暂挂线程的执行,选择一个运行中的线程并单击 Debug 视图工具栏中的 Suspend按钮。

会显示该线程的当前调用堆栈,并且在 Debug 透视图的编辑器中突出显示当前执行的行。

暂挂线程时,将光标放置到 Java 编辑器中的变量上,该变量的值显示在一个小悬浮窗口中。

同样,该线程的顶部堆栈帧被自动选中,该堆栈帧中的可视变量显示在 Variables 视图中。

可以通过在 Variables 视图中单击变量名来检查相应的变量。

热交换错误修正:

实时代码修正

如果您运行的是 JVM1.4(Java 虚拟机,JavaVirtualMachine),Eclipse2.0.2 和 2.1 提供一个叫做热交换错误修正(HotswapBugFixing)的新功能(无法用于 JVM1.3 或更低版本 - 也请参阅 图 9)。

它允许在调试器会话过程中更改源代码,这要比“退出应用程序,更改源代码,重新编译,再启动另一个调试会话”的一系列步骤好多了。

要使用该功能,只需在编辑器中更改代码并恢复调试。

由于 JVM1.4 与 Java 平台调试器体系结构(JavaPlatformDebuggerArchitecture,JPDA)兼容,所以能使用该功能。

JPDA 实现了在运行中的应用程序中用经过修改的代码进行替换的能力。

当然,当启动您的应用程序或找到出错点需要花费很长时间的时候,该功能极其有用。

图 9. 热交换错误修正功能不能在 JVM1.3 及更低版本中使用 

如果您完成调试时程序还没有被完整地执行过,请在 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(虚拟机,VirtualMachine)。

 图 10显示了远程调试会话的连接属性的设置。

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

调试其它语言

Java 是 Eclipse 平台的主语言。

然而,Eclipse 平台同时也是一个可支持许多其它语言的可扩展平台,而其中最重要的就是支持 C/C++(因为其流行性)。

Eclipse 通过用 C/C++ 开发工具(CDT)支持 C/C++。

请参阅 参考资料以获取相关链接。

CDT 通过调试 C/C++ 代码的功能扩展了标准的 EclipseDebug 视图,同时 CDTDebug 视图允许您在工作台中管理 C/C++ 项目的调试。

CDT 不包含其内部调试器,但它向必须可在本地使用的 GNUGDB 调试器提供了一个前端。

下载并安装了 CDT 之后,只需切换到 Debug 视图,您就可以开始调试当前的 C/C++ 项目了(请参阅 参考资料,以获取一篇介绍如何安装 CDT 的文章的链接)。

这样您可以设置(并在执行过程中任何时候更改)代码中的断点,并且跟踪变量和寄存器。

Eclipse 调试器显示您调试中各个目标的暂挂线程的堆栈帧。

程序中的各个线程作为树的节点出现。

它显示了运行中各目标的进程。

请记住当 GNUGDB 调试一个带有调试符号链接的程序时,它最有效。

这是在编译过程中由命令行参数 -g 来实现的。

需要更多的信息请使用 -ggdb 开关,该参数包含有特定于 GNUGDB 的调试符号。

如果您要调试 servlet,使用 SysdeoEclipseTomcatLauncher。

该插件使您能够管理 Tomcat4.x/3.3servlet 容器(通过创建和导入一个 TomcatWAR 项目)。

它同时在一个内部 JavaEclipse 调试器中注册一个 Tomcat 进程,这样您就能方便地调试 Tomcat 应用程序了。

还有其它几个 Eclipse 插件,使我们能够对 servlet 使用内部 Eclipse 调试器,比如 Cactus 的 Eclipse 插件,Resin 插件和 X-ParrotsServletExec 插件。

在下面的 参考资料中可获得这些插件的链接。

结束语

Eclipse 平台提供了内置的 Java 调试器,该调试器具有标准调试功能,包括进行单步执行、设置断点和值、检查变量和值以及暂挂和恢复线程的能力。

它还可以用于调试在远程机器上运行的应用程序。

Eclipse 平台主要是一个 Java 开发环境,但是同一个 Eclipse 的 Debug 视图也可用于 C 和 C++ 编程语言。

 

记得刚刚毕业的时候,自己连断点也不会打,当时还在用JCreate ,就连毕业设计也是用 System.out 找 Bug 的,想想真的很笨。

开始工作后,一个星期过去了,在一个 1 、 2 百万行的系统中找 Bug ,我依然在用 System.out ,当时最痛苦的就是修改代码,每次找到疑似 Bug ,就输出一下,然后重启(那时也不知道代码热替换),直到有一天带我的导师发现了这样笨笨的调试 Bug ,才让我第一次认识了断点,也知道了代码修改完了可以进行热替换, 我这个中国教育的半牺牲品才算向美好生活迈进了一小步。

 

 

网摘二

1、 条件断点

断点大家都比较熟悉,在Eclipse Java 编辑区的行头双击就会得到一个断点,代码会运行到此处时停止。

条件断点,顾名思义就是一个有一定条件的断点,只有满足了用户设置的条件,代码才会在运行到断点处时停止。

在断点处点击鼠标右键,选择最后一个"Breakpoint Properties"

断点的属性界面及各个选项的意思如下图,

2、 变量断点

断点不仅能打在语句上,变量也可以接受断点,

上图就是一个变量的打的断点,在变量的值初始化,或是变量值改变时可以停止,当然变量断点上也是可以加条件的,和上面的介绍的条件断点的设置是一样的。

3、 方法断点

 

方法断点就是将断点打在方法的入口处,

方法断点的特别之处在于它可以打在 JDK的源码里,由于 JDK 在编译时去掉了调试信息,所以普通断点是不能打到里面的,但是方法断点却可以,可以通过这种方法查看方法的调用栈。

4、 改变变量值

代码停在了断点处,但是传过来的值不正确,如何修改一下变量值保证代码继续走正确的流程,或是说有一个异常分支老是进不去,能不能调试时改一下条件,看一下异常分支代码是否正确?

在Debug 视图的 Variables 小窗口中,我们可以看到 mDestJarName 变量的值为 " F:

\Study\eclipsepro\JarDir\jarHelp.jar "

我们可以在变量上右键,选择"Change Value..." 在弹出的对话框中修改变量的值,

 

或是在下面的值查看窗口中修改,保用Ctr+S 保存后,变量值就会变成修改后的新值了。

5、 重新调试

 

这种调试的回退不是万能的,只能在当前线程的栈帧中回退,也就说最多只能退回到当前线程的调用的开始处。

回退时,请在需要回退的线程方法上点右键,选择 "Drop to Frame"

6、 远程调试

用于调试不在本机上的程序,有两种方式,

1、本机作为客户端

2、本机作为服务端

使用远程调试的前提是服务器端和客户端的代码是一致的。

 

本机作为客户端

本机作客户端比较常用,需要在远端的服务器上的java程序在启动时打开远程调试开关,

服务器端需要加上虚拟机参数

1.5以前版本(1.5以后也可用):

【-Xdebug-Xrunjdwp:

transport=dt_socket,server=y,address=8000 】

1.5及以上版本:

【 -agentlib:

jdwp=transport=dt_socket,server=y,address=8000】

F:

\Study\eclipsepro\screensnap>java-Xdebug-Xrunjdwp:

transport=dt_socket,server=y,address=8000-jarscreensnap3.jar

连接时远程服务器时,需要在Eclipse中新建一个远程调试程序

这里有一个小地方需注意,连接上的时候貌似不能自动切换到Debug视图,不要以为本机的调试程序没有连接到服务器端。

 

本机作为服务端

同本机作为客户端相比,只需要修改一下“ConnectionType”

 

这时Eclipse会进入到等待连接的状态

连接程序使用如下参数即可连接本机服务器,IP地址请用实现IP替换~~

【-agentlib:

jdwp=transport=dt_socket,suspend=y,address=127.0.0.1:

8000】

F:

\Study\eclipsepro\screensnap>java-agentlib:

jdwp=transport=dt_socket,suspend=y,address=127.0.0.1:

8000-jarscreensnap3.jar

 

远程调试时本地的代码修改可同步到远程,但不会写到远程的文件里,也就是说本地修改会在下次启动远程程序时就没有了,不会影响到下次使用时的远程代码。

 

有关远程调试更详细点的介绍请参考【使用Eclipse 远程调试Java 应用程序】

 

 

好像漏了一个断点,异常断点,补一下。

7、异常断点

经常遇见一些异常,然后程序就退出来了,要找到异常发生的地方就比较难了,还好可以打一个异常断点,

上图中我们增加了一个NullPointException的异常断点,当异常发生时,代码会停在异常发生处,定位问题时应该比较有帮助。

 

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1