利用Eclipse平台调试您的软件项目
副标题#e#
调试是措施员无法回避的事情。调试要领有很多种,但归根结底,就是找到激发错误的代码。举例来说,在 Linux 应用措施中,分段妨碍被认为是最常见的错误之一。当措施实验会见未分派给它的内存并因为分段违例而终止时,将发生这种错误。
要批改这种错误,您需要找到激发该行为的那行代码。一旦找到有问题的代码行,这对付知道激发错误的上下文及其相关的值、变量和要领也是有所辅佐的。利用调试器将使查找这些信息变得相当简朴。
Eclipse 调试器及 Debug 视图
Eclipse 平台的特色在于内置了 Java 调试器,该调试器提供所有尺度调试成果,包罗举办单步执行、配置断点和值、查抄变量和值以及暂挂和规复线程的本领。另外,您还可以调试在长途呆板上运行的应用措施。Eclipse 平台主要是一个 Java 开拓情况,但其体系布局同时也向其它编程语言开放。如以下您将看到的,同一个 Eclipse 的 Debug 视图也可用于 C 和 C++ 编程语言。
Eclipse 平台事情台(Eclipse Platform Workbench)及其东西是基于 Java 开拓东西(JDT)组件所构建的。这些组件向 Eclipse 提供以下成果:
1、项目打点东西
2、透视图和视图
3、构建器、编辑器、搜索和构建成果
4、调试器
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 用户界面的通例视图。
图 1. Eclipse Debug 视图用户界面的通例视图
调试 Java
在您能调试您的项目之前,需要先完整地编译和运行代码。您首先需要为您的应用措施建设运行设置并确认其正常启动。之后,您需要利用 Run > Debug…菜单,以同样的方法配置调试设置。您还需要选择作为主 Java 类的由调试器利用的类(也请参阅 图 2)。对一个项目,您但愿有几种调试设置就可以有几种。当调试器启动后(通过 Run > Debug…),会在一个新窗口打开它,您可以筹备开始调试。
图 2. 在调试设置中配置项目标主 Java 类
以下是最常见的 Eclipse 调试操纵的示例指示信息:
配置断点
当您启动应用措施以举办调试时,Eclipse 自动切换到 Debug 透视图。无庸置疑,最常见的调试进程就是配置断点,以答允查抄在条件语句和轮回中的变量和值。要在 Java 透视图的 Package Explorer 视图中配置断点,双击所选的源代码文件,在编辑器中打开它。遍历全部代码,将光标安排在含有可疑代码的那一行的标志栏上(在编辑器区域的左侧)。双击以配置断点(也请参阅 图 3)。
图 3. 在编辑器左侧边沿可看到两个断点标志
#p#副标题#e#
此刻通过 Run > Debug…菜单启动调试会话。有一点很重要,不要把数条语句放在同一行,因为您不能在同一行的多条语句上单步跳过或配置行断点(也请参阅 图 4)。
图 4. 视图通过左侧边沿的箭头指出当前正在执行的行
条件断点
一旦您找到堕落的处所,您会想要相识在瓦解前措施在干些什么。完成该事情的一种要领是单步执行措施中的每条语句,一次一句,直到达到出问题的处所。有时候更好的要领是仅运行某段代码并在出问题的处所终止其执行,这样就可以查抄该位置上的数据。要实现这一点,大概要声明每当表达式的值变动时就被触发的条件断点(请参阅 图 5)。另外,在输入条件表达式时还可以利用代码帮助。
图 5. 配置条件断点触发器
对表达式求值
要在 Debug 透视图的编辑器中求表达式的值,选中配置有断点的一整行,并在上下文菜单中选择 Inspect 选项(请参阅 图 6)。表达式是在当前仓库帧的上下文中求值的,其功效显示在 Display 窗口的 Expressions 视图中。
图 6. 用 Inspect 选项求表达式的值
查察变量
#p#分页标题#e#
Variables 视图(在 Display 窗口中)显示了选中的仓库帧中的变量值(请参阅 图 7)。要查察所请求的变量,只需展开 Variables 视图中的树直到您看到所请求的元素为止。您也可以在 Debug 视图中单步执行代码的同时,在 Variables 视图中查察变量。
图 7. 在 Display 窗口中查察变量
当调试器在断点上遏制时,您可以通过在 Run > Debug…菜单上选择 Step Over 选项来继承调试器会话(请参阅 图 8)。这将单步跳过突出显示的代码行并执行同一个要领中的下一行(可能它在挪用当前要领的要领中继承)。作为最后一步的功效而产生变动的变量用颜色突出显示(缺省值是赤色),所用颜色可在“Changed Variable Value Color”首选项(由 Debug Variable Views 指定)中指定。
图 8. Run… 菜单中的调试器呼吁
要在 Debug 视图中暂挂线程的执行,选择一个运行中的线程并单击 Debug 视图东西栏中的 Suspend按钮。会显示该线程的当前挪用仓库,而且在 Debug 透视图的编辑器中突出显示当前执行的行。
暂挂线程时,将光标安排到 Java 编辑器中的变量上,该变量的值显示在一个小悬浮窗口中。同样,该线程的顶部仓库帧被自动选中,该仓库帧中的可视变量显示在 Variables 视图中。可以通过在 Variables 视图中单击变量名来查抄相应的变量。
热互换错误批改:及时代码批改假如您运行的是 JVM 1.4(Java 虚拟机,Java Virtual Machine),Eclipse 2.0.2 和 2.1 提供一个叫做热互换错误批改(Hotswap Bug Fixing)的新成果(无法用于 JVM 1.3 或更低版本 - 也请参阅 图 9)。
它答允在调试器会话进程中变动源代码,这要比“退出应用措施,变动源代码,从头编译,再启动另一个调试会话”的一系列步调许多几何了。要利用该成果,只需在编辑器中变动代码并规复调试。由于 JVM 1.4 与 Java 平台调试器体系布局(Java Platform Debugger Architecture,JPDA)兼容,所以能利用该成果。
JPDA 实现了在运行中的应用措施顶用颠末修改的代码举办替换的本领。虽然,当启动您的应用措施或找到堕落点需要耗费很长时间的时候,该成果极其有用。
图 9. 热互换错误批改成果不能在JVM1.3及更低版本中利用
假如您完成调试时措施还没有被完整地执行过,请在 Debug 视图中的上下文菜单中选择 Terminate 选项。一个常见的错误是您在调试器会话中利用了 Debug 或 Run 而不是 Resume。这样将会启动另一个调试器会话,而不是继承当前的会话。
长途调试
Eclipse 调试器提供了一个有趣的选项,可用于调试长途应用措施。它可以毗连到一个运行 Java 应用措施的长途 VM 上,并将其毗连到内部调试器上。处理惩罚长途调试会话很是雷同于当地调试。不外,长途调试设置要求对 Run > Debug…窗口举办差异的配置。您首先要选择左侧视图中的 Remote Java Application 项,单击 New按钮。这样就建设了一个新的长途启动设置,并显示三个选项卡:Connect、Source 和 Common。
在 Connect 选项卡的 Project 域中,选择用作启动首选项的项目(用于查找源代码)。在 Connect 选项卡的 Host 域中,输入运行 Java 措施的长途主机的 IP 地点或域名。在 Connect 选项卡的 Port 域中,输入长途 VM 接管毗连的端口。
一般来说,该端口是在长途 VM 启动时指定的。当您想让调试器确定 Terminate 呼吁在长途会话中是否可用,可以选择 Allow termination of remote VM 选项。假如您但愿能终止所毗连的 VM,则选择该选项。此刻当您选择 Debug 选项时,调试器将实验按指定的地点和端口毗连长途 VM,并在 Debug 视图中显示功效。
假如启动器无法毗连至指定位置上的 VM,将显示错误动静。一般来说,长途调试成果的可用性完全取决于长途主机上运行的 Java VM(虚拟机,Virtual Machine)。 图 10显示了长途调试会话的毗连属性的配置。
图 10. 配置长途调试会话的毗连属性
调试其它语言
Java 是 Eclipse 平台的主语言。然而,Eclipse 平台同时也是一个可支持很多其它语言的可扩展平台,而个中最重要的就是支持 C/C++(因为其风行性)。Eclipse 通过用 C/C++ 开拓东西(CDT)支持 C/C++。请参阅 参考资料以获取相关链接。
#p#分页标题#e#
CDT 通过调试 C/C++ 代码的成果扩展了尺度的 Eclipse Debug 视图,同时 CDT Debug 视图答允您在事情台中打点 C/C++ 项目标调试。CDT 不包括其内部调试器,但它向必需可在当地利用的 GNU GDB 调试器提供了一个前端。
下载并安装了 CDT 之后,只需切换到 Debug 视图,您就可以开始调试当前的 C/C++ 项目了(请参阅 参考资料,以获取一篇先容如何安装 CDT 的文章的链接)。这样您可以配置(并在执行进程中任何时候变动)代码中的断点,而且跟踪变量和寄存器。
Eclipse 调试器显示您调试中各个方针的暂挂线程的仓库帧。措施中的各个线程作为树的节点呈现。它显示了运行中各方针的历程。请记着当 GNU GDB 调试一个带有调试标记链接的措施时,它最有效。这是在编译进程中由呼吁行参数 -g 来实现的。需要更多的信息请利用 -ggdb 开关,该参数包括有特定于 GNU GDB 的调试标记。
假如您要调试 servlet,利用 Sysdeo Eclipse Tomcat Launcher。该插件使您可以或许打点 Tomcat 4.x/3.3 servlet 容器(通过建设和导入一个 Tomcat WAR 项目)。它同时在一个内部 Java Eclipse 调试器中注册一个 Tomcat 历程,这样您就能利便地调试 Tomcat 应用措施了。尚有其它几个 Eclipse 插件,使我们可以或许对 servlet 利用内部 Eclipse 调试器,好比 Cactus 的 Eclipse 插件,Resin 插件和 X-Parrots ServletExec 插件。
竣事语
Eclipse 平台提供了内置的 Java 调试器,该调试器具有尺度调试成果,包罗举办单步执行、配置断点和值、查抄变量和值以及暂挂和规复线程的本领。它还可以用于调试在长途呆板上运行的应用措施。Eclipse 平台主要是一个 Java 开拓情况,可是同一个 Eclipse 的 Debug 视图也可用于 C 和 C++ 编程语言。