本文是Eclipse调试(1)——基础篇 的提高篇。分两个部分:

1) Debug视图下的3个小窗口视图:变量视图、断点视图和表达式视图

2) 设置各种类型的断点

变量视图、断点视图和表达式视图

1. variable:

变量视图显示debug过程中程序中出现的所有的变量以及其值。我们也可以通过该视图手动设置变量的value。手动设置变量值的作用在于,当debug到该变量处时,没有得到我们预期的值,为了能让我们的debug按照预期的方式继续走下去(如变量满足一定条件才能走到某一个特定的分支中去),我们可以设置变量值为预期的值,达到测试目的。


2. Breakpoints:

断点视图显示程序中的所有断点。我们可以通过这个视图设置断点的类型,挂断条件等。还可以选择skip哪些断点以及删除断点。本文之后的部分将对断点的设置做更详细的讲解。


3. Expressions:

表达式视图可以增加一些自己感兴趣的表达式,观察其值。也可以选中表达式,使用“Ctrl + Shift +i”快捷键在debug代码中查看其值,或者右键–>Inspect。


断点设置

1. 普通行断点

在代码的某一行最左侧双击就设置了一个普通行断点。程序debug运行到该行就会在此断点处暂停。删除该断点可以再次双击,也可以在断点视图中删除。在断点视图中也可以设置是否跳过断点。


2. 行断点-条件断点(Hit Count Conditional)

条件断点有两种:Hit Count和Conditional。设置方法为:①可以在断点视图中选定某个断点,然后在视图下方设置;②也可以选中某个断点后右击–>Breakpoint Properties…中设置。

Hit Count断点适用于测试循环时,在循环到第N次此断点处时,程序停止。Hit Count断点只会停止一次。

Conditional断点是设置一个条件表达式,设置当该条件表达式为true或者条件表达式的值改变时程序停止。Conditional断点只要条件满足就会停止。


3. 异常断点

异常断点可以通过Breakpoints视图的Add Java Exception Breakpoint按钮添加,在方法抛出指定的异常的时候会触发中断。可选项包括Caught locations、Uncaught locations、Subclass of this exception分别对应在代码中捕获了该异常时、未捕获该异常时、抛出的异常为当前Exception的子类时触发中断。

需要注意的是Eclipse默认会在抛出未捕获异常时自动中断,所以取消Uncaught locations时看起来没有任何效果,抛出的异常仍然会触发中断。可以通过window–>preferences–>java–>debug取消Suspend execution on uncaught exceptions选项来使Uncaught locations生效。但不建议这样做。


4. 方法断点

方法断点打在方法声明的第一行处。默认情况下在进入该方法时线程中断,可以选择Entry或Exit选择在方法进入或方法退出时中断。


5. 监视断点(watchpoint)

监视断点是设置在类的实例变量或者静态变量上的。断点的条件有Access、Modification、Hit count。其中,Access和Modification必须至少选择一个。Hit count是可选的。当选择Access或Modification时,每次变量被访问或者变量都修改,在被访问或修改处都会中断。如果还选择了Hit count,则会在变量被访问或者修改的第N次中断一次。




单步过滤

单步过滤的场景是我们在使用F5来跟到某个方法内部的时候,经常会跟到一些我们确定不需要看的方法内部。

this.getTradeDetail(uid, itemStr.subString(0,5))

比如这行代码,想F5进入getTradeDetail内部,会首先执行itemStr.subString方法,会先进入subString方法,而这方法是jdk的String方法,确定没问题,不需要关心,单步过滤就是跳过这些我们想忽略的方法直接到目标方法内部的一种debug技巧。

在Window > PreferencesJava > Debug > Step Filtering 设置过滤器, 可以选择需要过滤掉的包和类。同时要确保你在debug视图中启用了单步过滤,如下图。这样在使用单步调试的时候,就会使用到这个过滤功能。

上图是过滤器配置,典型的就是把jdk的一些类和包配置过滤。下图是要在debug时候开启单步过滤,否则不生效。



显示逻辑结构

显示逻辑结构按钮可以让变量以更好的逻辑结构展示出来,提高可读性。如下图所示:



参考文章:

eclipse调试java程序的九个技巧

使用 Eclipse 调试 Java 程序的 10 个技巧

Debug—Eclipse断点调试基础(二)

Eclipse调试(2)——各种类型断点设置的更多相关文章

  1. Eclipse 调试Bug之使用断点的七大技巧

    原文链接:http://xiaohuafyle.iteye.com/blog/1705494 调试竟然有这么多技巧,亏我以前竟不知道...   Eclipse这个开发工具为我们调试bug提供了非常便利 ...

  2. Eclipse调试(1)——基础篇

    作为使用Eclipse的程序员都会使用它的Debug.但是有不少人只会用F6.F8,其他功能知之甚少.今天我就来总结一下我在使用eclipse的debug时的一些个人经验.水平有限,不足之处还请赐教. ...

  3. Chrome 中的 JavaScript 断点设置和调试技巧 (转载)

    原文地址:http://han.guokai.blog.163.com/blog/static/136718271201321402514114/ 你是怎么调试 JavaScript 程序的?最原始的 ...

  4. eclipse调试断点【转载】

    该片博文是转载他人的博客,原博客地址:http://blog.csdn.net/maritimesun/article/details/7815903 作为开发人员,掌握开发环境下的调试技巧十分有必要 ...

  5. eclipse调试断点

    1.条件断点 如果你不知道如何添加断点,只需点击左边面板(行号前面)断点即被创建.在调试界面中,“断点”视图会把所有被创建的断点列出来.我们可以给它加一个布尔条件,也就是说,该断点会被激活并且如果布尔 ...

  6. Keil 的调试命令、在线汇编与断点设置

    上一讲中我们学习了如何建立工程.汇编.连接工程,并获得目标代码,但是做到这一 步仅仅代表你的源程序没有语法错误,至于源程序中存在着的其它错误,必须通过调试才能 发现并解决,事实上,除了极简单的程序以外 ...

  7. [原创]GDB调试指南-断点设置

    前言 上篇<GDB调试指南-启动调试>我们讲到了GDB启动调试的多种方式,分别应用于多种场景.今天我们来介绍一下断点设置的多种方式. 为何要设置断点 在介绍之前,我们首先需要了解,为什么需 ...

  8. javascript断点设置和调试

    JS调试必备的5个debug技巧http://www.jb51.net/article/47812.htm Chrome 中的 JavaScript 断点设置和调试技巧http://www.xuebu ...

  9. Eclipse调试Bug的七种常用技巧(转)

        注意事项及小结: (1)Line Breakpoint:如果设置Conditional,监控的变量需要比当前行高一级block,譬如for(int i=0;i<20;i++)中的i,fo ...

随机推荐

  1. SQL to Java code for Elasticsearch

    Elasticsearch虽然定位为Search Engine,但是因其可以持久化数据,很多时候,我们把Elasticsearch当成Database用,但是Elasticsearch不支持SQL,就 ...

  2. 医疗器械c#上位机开发指引教程

    此教程面向的读者:对医疗器械上位机编程有兴趣,或者急需了解医疗器械(尿常规.血液分析.生化.心电.B超等医疗下位仪器)的编程流程.编程细节的程序员. 1.得到仪器协议 当我们需要与医疗器械等下位机数据 ...

  3. str_replace替换换行符失败原因

    在编程中,需要替换掉字符串的换行符再存进数据库, 语句: $str = str_replace(array('/r/n', '/r', '/n'), $str); 发现语句并没有替换,网上查找后,知道 ...

  4. PHPCMS v9.6.0 wap模块 SQL注入

    调试这个漏洞的时候踩了个坑,影响的版本是php5.4以后. 由于漏洞是由parse_str()函数引起的,但是这个函数在gpc开启的时候(也就是php5.4以下)会对单引号进行过滤\'  . 看这里: ...

  5. codevs 3061 质子撞击炮②

    提交地址:http://codevs.cn/problem/3016/ 3016 质子撞击炮 II  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 黄金 Gold     题目描 ...

  6. [USACO07NOV]牛继电器Cow Relays

    题目描述 给出一张无向连通图,求S到E经过k条边的最短路. 输入输出样例 输入样例#1: 2 6 6 4 11 4 6 4 4 8 8 4 9 6 6 8 2 6 9 3 8 9 输出样例#1: 10 ...

  7. Codeforces 671 D. Roads in Yusland

    题目描述 Mayor of Yusland just won the lottery and decided to spent money on something good for town. Fo ...

  8. 【NOIP2012-开车旅行】

    这道题:你不仅要学会两人交换开车,还要做到高效驾驶. ·分析:       在拨开花哨题目的迷雾之后,发现两个重要突破口:       ①从每个点开始,他们的路径是一定的,不存在决策选取.       ...

  9. [BZOJ]1063 道路设计(Noi2008)

    省选一试后的第一篇blog! Description Z国坐落于遥远而又神奇的东方半岛上,在小Z的统治时代,公路成为这里主要的交通手段.Z国共有n座城市,一些城市之间由双向的公路所连接.非常神奇的是Z ...

  10. [Codeforces]663E Binary Table

    某变换好题.不过听说还有O(2^n*n^2)DP的…… Description 给定一个n*m的01矩阵,你可以选择对任意行和任意列取反,使得最终“1”的数量尽量少. Input 第一行两个整数n,m ...