admin 管理员组

文章数量: 887021


2024年1月16日发(作者:常量元素是指其在体内含量)

调试是程序员无法回避的工作。调试方法有许多种,但归根结底,就是找到引发错误的代码。举例来说,在 Linux 应用程序中,分段故障被认为是最常见的错误之一。当程序尝试访问未分配给它的内存并因为分段违例而终止时,将产生这种错误。要修正这种错误,您需要找到引发该行为的那行代码。一旦找到有问题的代码行,这对于知道引发错误的上下文及其相关的值、变量和方法也是有所帮助的。使用调试器将使查找这些信息变得相当简单。

Eclipse 调试器及 Debug 视图

Eclipse 平台的特色在于内置了 Java 调试器,该调试器提供所有标准调试功能,包括进行单步执行、设置断点和值、检查变量和值以及暂挂和恢复线程的能力。此外,您还可以调试在远程机器上运行的应用程序。Eclipse 平台主要是一个 Java 开发环境,但其体系结构同时也向其它编程语言开放。如以下您将看到的,同一个 Eclipse 的 Debug 视图也可用于 C

和 C++ 编程语言。

Eclipse 平台工作台(Eclipse Platform Workbench)及其工具是基于 Java 开发工具(JDT)组件所构建的。这些组件向 Eclipse 提供以下功能:

项目管理工具

透视图和视图

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

调试器

Eclipse 调试器本身是作为 Eclipse 二进制文件中包含的标准插件而存在的。Eclipse 还有一个特别的 Debug 视图,允许您在工作台中管理程序的调试和运行。它为调试中的每个目标显示其暂挂线程的堆栈帧。程序中的各个线程以作为树的节点出现,而 Debug 视图则显示运行中的各目标的进程。如果暂挂一个线程,则其堆栈帧显示为子元素。

在您开始使用 Eclipse 调试器之前,假定您已经安装了适当的 Java SDK/JRE(我推荐您使用 Java VM 1.4)和 Eclipse 平台 SDK 2.0/2.1,且两者都工作正常。一般来说,先使用 Eclipse 样本来测试一下调试选项是一个好主意。如果您要开发和调试 C/C++ 项目,您还需要得到并安装 C/C++ 开发工具(C/C++ Development Tool,CDT)。有关 Java

SDK/JRE、Eclipse 平台和样本以及 CDT 的链接,请参阅本文后面的 参考资料。 图 1显示了 Debug 用户界面的常规视图。

图 11. Eclipse DDebug 视图图用户界面的常规视图

回页首

调试试 Javaa

在您您能调试您的的项目之前,需要先完整地需地编译和运行行代码。您首首先需要为您您的应用程序创建运行行配置并确认认其正常启动动。之后,您需要使用 Ruun > 菜单,以同样的方式设设置调试试配置。您还还需要选择作作为主 Java 类的由调试器使用的类(也请参阅 图 2)。对一个项目目,您希望有有几种调试配配置就可以有几种。当调试试器启动后(通过 Run > ),)会在在一个新窗口口打开它,您可以准备开始始调试。

图 22. 在调试配配置中设置项目的主 Javva 类

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

设置置断点

当您您启动应用程程序以进行调试时,Eclippse 自动切换换到 Debug 透视图。无无庸置疑,最最常见的调调试过程就是是设置断点,以允许检查在在条件语句和和循环中的变变量和值。要要在 Java 透视透图的的 Package EExplorer 视图中设置断点点,双击所选选的源代码文文件,在编辑辑器中打开它它。遍历全全部代码,将将光标放置在含有可疑代码码的那一行的的标记栏上(在编辑器区区域的左侧)。双击以以设置断点((也请参阅 图 3)。

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

现在在通过 Run >> 菜单启动调试菜试会话。有一点点很重要,不要把数条语不语句放在同一一行,因为为您不能在同同一行的多条条语句上单步跳跳过或设置行行断点(也请请参阅 图 4)。

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

条件件断点

一旦旦您找到出错错的地方,您会会想要了解在在崩溃前程序序在干些什么么。完成该工工作的一种方方法是单步步执行程序中中的每条语句,一次一句,,直到到达出出问题的地方方。有时候更更好的方法是是仅运行某某段代码并在在出问题的地地方终止其执行,这样就可可以检查该位位置上的数据据。要实现这一一点,可能能要声明每当当表达式的值值更改时就被触触发的条件断断点(请参阅阅 图 5)。此此外,在输入入条件表表达式时还可可以使用代码码辅助。

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

对表表达式求值值

要在在 Debug 透视图的编辑透器中求表达式式的值,选中中设置有断点点的一整行,并在上下文菜单中选选择 Inspect 选项(请参参阅 图 6)。表达式是在在当前堆栈帧帧的上下文中中求值的,其其结果显示示在 Display 窗口的 Exxpressions 视视图中。

图 66. 用 Inspeect 选项求表表达式的值

查看看变量

Variiables 视图(在 Display 窗口中)显显示了选中的的堆栈帧中的的变量值(请请参阅 图 7)。)要查查看所请求的的变量,只需需展开 Variabbles 视图中的树直到您看看到所请求的的元素为止。。您也可可以在 Debuug 视图中单步执行代码的同时,在Variables 视图中查看变视变量。

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

当调调试器在断点点上停止时,您可以通过在您在 Run > 菜单上上选择 Stepp Over 选项来继续调调试器会话((请参阅 图 8)。这将单单步跳过突出出显示的代码行并执行同一一个方法中的的下一行行(或者它在在调用当前方法法的方法中继继续)。作为为最后一步的的结果而发生生更改的变量量用颜色突突出显示(缺缺省值是红色色),所用颜色可在“Changed Variabble Value Coolor”首选项(由

Debbug Variablee Views 指定定)中指定。

图 88. 菜单中的调试菜器命令

程的执行,要在在 Debug 视图中暂挂线视选选择一个运行行中的线程并并单击 Debuug 视图工具栏中的 SSuspend按钮钮。会显示该该线程的当前前调用堆栈,并且在 Deebug 透视图图的编辑器中突出显示示当前执行的的行。

暂挂挂线程时,将将光标放置到到 Java 编辑辑器中的变量上,该变量的的值显示在一一个小悬浮窗窗口选中,该堆栈中。同样,该线线程的顶部堆堆栈帧被自动选栈帧中的可视视变量显示在在 Variabless 视图中中。可以通过过在 Variablees 视图中单单击变量名来检查相应的变变量。

回页首

热交交换错误误修正:实时代码码修正如果果您运行的是是 JVM 1.4(Java 虚拟机机,Java Virtual Machinee),Eclipse 2.0.2 和 2.1 提(无法用于 JJVM 1.3 或更低供一一个叫做热交交换错误修正正(Hotswap Bug Fixing)的新功能)或版本本 - 也请参参阅 图 9)。它允许在调试它试器会话过程程中更改源代代码,这要比“退出应用程程序,更改改源代码,重重新编译,再再启动另一个调试会话”的一系列步骤的好多了。要使使用该功能,,只

需在在编辑器中更更改代码并恢恢复调试。由于 JVM 1.4 与 Java 平台调试器体平体系结构(Jaava

Plattform Debuggger Architeccture,JPDAA)兼容,所所以能使用该该功能。JPDAA 实现了在在运行中的的应用程序中中用经过修改改的代码进行替换的能力。当然,当启启动您的应用用程序或找到出错其有用。 点需需要花费很长长时间的时候候,该功能极其图 99. 热交换错错误修正功能不能在 JVMM 1.3 及更低低版本中使用用

如果果您完成调试试时程序还没没有被完整地执执行过,请在在 Debug 视图中的上下视下文菜单中选选择

Termminate 选项项。 一个常见见的错误是您您在调试器会会话中使用了了 Debug 或 Run 而不是是

Ressume。这样将将会启动另一一个调试器会会话,而不是是继续当前的的会话。

回页首

远程程调试

Eclipse 调试器提提供了一个有有趣的选项,,可用于调试试远程应用程程序。它可以以连接到一个个运行

Javaa 应用程序的的远程 VM 上,并将其其连接到内部调试器上。处处理远程调试试会话非常类类似对 Run > De于本本地调试。不不过,远程调试配置要求对窗口进行不同的设设置。您首先先要选择择左侧视图中中的 Remotee Java Appliccation 项,单单击 New按钮。这样就按就创建了一个个新的远程程启动配置,并显示三个个选项卡:Coonnect、Souurce 和 Commmon。

在 CConnect 选项项卡的 Projject 域中,选选择用作启动动首选项的项项目(用于查查找源代码)。在

址或域名。在Connnect 选项卡卡的 Host 域中,输入运域运行 Java 程序的远程主程主机的 IP 地址在

Connnect 选项卡卡的 Port 域中,输入远域远程 VM 接受受连接的端口口。一般来说说,该端口是是在远可以程 VVM 启动时指指定的。当您您想让调试器器确定 Terminate 命令在在远程会话中中是否可用,选择择 Allow termmination of reemote VM 选选项。如果您您希望能终止止所连接的 VVM,则选择择该选项。现在当您选选择 Debug 选项时,选调试试器将尝试按按指定的地址址和端口连接接远程 VM,并在

Debbug 视图中显显示结果。

如果果启动器无法法连接至指定定位置上的 VVM,将显示错错误消息。一般来说,一远远程调试功能能的可用性性完全取决于于远程主机上上运行的 Javva VM(虚拟拟机,Virtual Machine)。。 图 10显示示了远程程调试会话的的连接属性的设置。

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

回页首

调试试其它语语言

Javaa 是 Eclipse 平台的主语语言。然而,,Eclipse 平台同时也是平是一个可支持持许多其它语语言的可扩扩展平台,而其其中最重要的的就是支持C/C++(因为为其流行性)。Eclipse 通通过用 C/C++ 开发工工具(CDT)支持 C/C+++。请参阅 参参考资料以获获取相关链接。CDT 通过过调试 C/C++ 代码的的功能扩展了了标准的 Eclipse Debug 视图,同时时 CDT Debuug 视图允许许您在工作台中管理 CC/C++ 项目的调试。CDDT 不包含其其内部调试器器,但它向必必须可在本地地使用的 GNU

GDBB 调试器提供供了一个前端端。

下载载并安装了 CDT C之后,只需切换到Debug 视图图,您就可以以开始调试当当前的 C/C++ 项目了了(请参阅 参考资料参,以以获取一篇介介绍如何安装装 CDT 的文章的链接)。这样您可以设置((并在执行过过程中任何时候更改)代码码中的断点,,并且跟踪变变量和寄存器器。Eclipse 调试它显器显显示您调试中中各个目标的暂挂线程的堆堆栈帧。程序序中的各个线线程作为树的的节点出现。示了了运行中各目目标的进程。请记住当 GGNU GDB 调试一个带有调有调试符号链链接的程序时时,它最有有效。这是在在编译过程中由命令行参数数

-g 来实现现的。需要更更多的信息请请使用-ggddb 开关,该参数包含含有特定于 GNU GDB G的的调试符号。

如果果您要调试 servlets,使用用 Sysdeo EEclipse Tomccat Launcheer。该插件使使您能够管理理

Tommcat 4.x/3.3 servlet 容器器(通过创建建和导入一个个 Tomcat WAR W项目)。。它同时在一一个

内部 Java Eclipse 调试器中注册一个 Tomcat 进程,这样您就能方便地调试 Tomcat 应用程序了。还有其它几个 Eclipse 插件,使我们能够对 servlet 使用内部 Eclipse 调试器,比如 Cactus 的 Eclipse 插件,Resin 插件和 X-Parrots ServletExec 插件。在下面的 参考资料中可获得这些插件的链接。

回页首

结束语

Eclipse 平台提供了内置的 Java 调试器,该调试器具有标准调试功能,包括进行单步执行、设置断点和值、检查变量和值以及暂挂和恢复线程的能力。它还可以用于调试在远程机器上运行的应用程序。Eclipse 平台主要是一个 Java 开发环境,但是同一个 Eclipse 的 Debug

视图也可用于 C 和 C++ 编程语言。


本文标签: 调试 代码 调试器 运行 远程