码迷,mamicode.com
首页 > 编程语言 > 详细

使用 Eclipse 调试 Java 程序的技巧【9】

时间:2016-04-14 06:40:13      阅读:292      评论:0      收藏:0      [点我收藏+]

标签:

若有不正之处,请多多谅解并欢迎批评指正,不甚感激。
请尊重作者劳动成果:

本文原创作者:pipi-changing
本文原创出处:http://www.cnblogs.com/pipi-changing/

本文版权归作者和博客园共有,未经作者同意必须保留此段声明,
且在文章页面明显位置给出原文连接 ,否则保留追究法律责任的权利。

 

 

 

 

使用 Eclipse 调试 Java 程序的技巧


 

不要调试太多

  只调试你觉得有问题的代码或者一部分一部分功能的调试;

 


 

【 断点视图 : 条件断点】

 

  如果你只对应用中的某部分感兴趣的话,这个功能非常有用。例如,如果你要在第13次循环的时候检查程

序,或者在一个抽象父类中调试某些功能,而你只关注其 中一个具体的实现。你可以在断点视图中设置条件,

或者通过代码旁边的蓝色断点标记的右键菜单("Breakpoint Properties")设置。你可以在条件代码片段为

true的时候暂停程序,或者当代码片段的值改变的时候挂起程序。

技术分享

 

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

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

技术分享

 

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

技术分享

 


 

 

 变量视图:展示逻辑结构】

 

 

   如果你需要在变量视图查看一个Map对象或者List对象的值,对于eclipse的默认设置,一般并不是那么容易。假设,你使用的是

HashMap,你 需要点击遍历各个实体条目,并面临各种HashMap的实现细节。但是,在变量视图上面有一个叫做“Show Logical

Structure”的按钮。它非常有用,尤其当你的对象的toString()方法所展示的信息并不友好的时候。

未开启“Show Logical Structure” 

 

 

 技术分享

 

 开启“Show Logical Structure” 

 

技术分享


 

 

【变量视图:更改变量值】

 

    当你需要稍微更改输入信息的时候,不需要重新开始调试会话,只需在一个表格中输入新的信息,你可以在调试阶段直接修改你

的变量的值。有些时候,你可以节省一些时间,你可以通过这个功能,更加简单的模拟一些怪异的情况。

技术分享


 

 

Display视图】 

 

   你知道“Display视图”吗?你可以在调试过程中,通过“Window” -> “Show View” -> “Display”来激活它。现在,你的eclipse

应该是一个空白的新视图。你可以使用这个视图,输入或者演算一些新的代码。这些代码在当前的调试位 置的上下文环境中被执行,这

意味着,你可以使用所有变量甚至是内容助手。要执行你的代码的话,只需标记它,并使用右键菜单或者CTRL+U(执行)或

者 CTRL+SHIFT+I (检查).

 技术分享

 


 

【导航: Drop to Frame】 

 

  我想任何人都知道“Step Into”, “Step over”,而且可能也知道“Step return”. 这些是调试时的基本导航功能。我想提两个我非常

喜欢的导航的高级方法。第一个是“Drop to Frame”. 使用这个特性你可以及时回退 ,  你可以直接回退到运行过的java堆栈帧中某一

帧。当我调试时,一不小心错过了某个关注的代码行时,我常常用这个回退一帧。使用“Drop to Frame”这个特性我可以简单的重新运

行某帧代码。 

 技术分享

 


 

【导航: Step into Selection】

 

   第二个是“Step into Selection”. 要使用它,你只需要按 Ctrl+Alt 同时点击一个你想运行到的方法名。非常方便,非常快速。相

比“Step Into”这个非常方便,想想你像跟踪 进一个有很多参数的函数,如果用“Step Into”你必须进入,退出每个参数计算过程,才

能进入到你真正想进的函数。“Run to line”也是很棒的特性。只需要把光标放在你想运行到的哪一行前面,然后按“CTRL+R”就可以

了。

 技术分享

 


 

导航器:使用键盘】 

 

 

F5——进入:移动到下一个步骤,如果当前行有一个方法调用,该控件将会跳转到被调用方法的第一行执行。

F6——跳出:移动到下一行。如果在当前行有方法调用,那么会直接移动到下一行执行。不会进入被调用方法体

    里面。

F7——返回:从当前方法中跳出,继续往下执行。

F8——移动到下一个断点处执行。

全局 单步跳入选择 Ctrl+F5 

全局 调试上次启动 F11 

全局 使用过滤器单步执行 Shift+F5 

全局 添加/去除断点 Ctrl+Shift+B 

全局 显示 Ctrl+D 

全局 运行上次启动 Ctrl+F11 

全局 运行至行 Ctrl+R 

全局 执行 Ctrl+U

 

  • Ctrl+Shift+B – “添加断点”
  • Ctrl+Shift+I – “检查”

 


 

 

【断点视图:Watchpoints】 

 

   如果改变这个变量会有什么结果?有时候创建一个watchpoint对于调试会非常有用。调试器会停止,不管这

个被观察的字段是被修改还是被读取 - 你可以自己来配置决定。你只需双击一个字段,然后你就可以在断点视图

中看到watchpoint,并且可以编辑它的属性。你甚至可以设置一个访问次数,这意味 着当变量到达访问次数数量的时候,调试器会停止。这对于普通的断点也适用。

 

 技术分享

 


 

 

【友好的可读的对象】 

 

   变量视图是使用对象的toString方法来实现对应的值。因为这个原因,如果提供友好的toString方法实现,

对调试来说会非常有用。在javadoc中关于java.lang.Object的默认toString实现,也是这样推荐的:

   “返回一个表示该对象的字符串。通常<code>toString</code>方法返回这么一个字符串,“字面表示”该对象。返回结果必须是一个简洁却富含可表示该对象的信息,并且友好可读取。我们推荐所有的子类都覆盖这个方法。”

 

你可以参考commons-lang中的 ToStringBuilder。它提供一些功能来编写 (引用自javadoc ) "良好并连贯” 的toString方法。

 

默认的ToString

 技术分享

 

 默认的ToStringBuilder例子

 技术分享

 

 ToStringBuilder例子 – 多行文本风格

技术分享

 

  如果你不能修改toString实现,例如你现在使用框架或者一个外部的API,你可以有另外一个选择,在

Eclipse中创建一个“Detail Formatter”。你需要在变量视图中右击一个对象,并点击“New Detail

Formatter…”。然后你就可以输入一些代码,用于展现这个对象。

 


 

 

【在Main函数里面停止执行】

 

  在运行/调试设置中,编辑配置对话框中有“Main”这个选项卡,我们可以勾选“Stop in main”这个复选框。如

果选中,那么在调试一个基于main方法的Java程序时,程序会在main方法第一行位置便停止执行。

技术分享

 


 

 

【分布过滤】 

 

  当我们进入(F5)方法的时候,我们还可以访问其外部库(比如java.*),我们可能不需要这个库,就可

以在Perference选项卡页面添加一个过滤器来排除这个包。

技术分享


 

 

 【远程调试】

 

 

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

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 -jar screensnap3.jar

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

 技术分享

 

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

本机作为服务端

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

 技术分享

 这时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 -jar screensnap3.jar

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

时就没有了,不会影响到下次使用时的远程代码。

 

 

 

使用 Eclipse 调试 Java 程序的技巧【9】

标签:

原文地址:http://www.cnblogs.com/pipi-changing/p/5388877.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!