标签:
若有不正之处,请多多谅解并欢迎批评指正,不甚感激。 本文原创作者: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
【断点视图: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 远程调试时本地的代码修改可同步到远程,但不会写到远程的文件里,也就是说本地修改会在下次启动远程程序 时就没有了,不会影响到下次使用时的远程代码。
|
标签:
原文地址:http://www.cnblogs.com/pipi-changing/p/5388877.html