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

测试代码

学东西能够学以致用才是关键。所以我使用示例代码的形式讲解每一个点。在下面的代码中,我打了两个断点(代码中注释位置)

public class DebugTest {

    public static String firstCall() {
        System.out.println("firstCall...");
        return "first";
    }

    public static String secodeCall() {
        System.out.println("secondCall");
        return "second";
    }

    public static void firstLayer() {
        System.out.println("firstLayer");
        secondLayer();
        System.out.println("firstLayer......");
    }

    public static void secondLayer() {
        System.out.println("secondLayer");
        Thread t1 = new Thread(new Runnable() {

            @Override
            public void run() {
                System.out.println("thread........");//断点2
                System.out.println("end........");
            }
        });
        t1.start();
        System.out.println("secondLayer..........");
    }

    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        sb.append(firstCall()).append(secodeCall());//断点1
        System.out.println("********************************");
        firstLayer();
    }

}

Debug view

以Debug方式运行程序,如果遇到断点则进入Debug view。Debug视图如下图所示:



视图中的信息如下图所示:

  • “Stack frame instance”:因为Java的内存模型是基于栈的,所以对于Java来说,每执行一个方法就是新建了一个栈结构(Stack frame instance)。
  • 从上面的视图中,还能够清晰的看到程序的调用层次:main方法中调用firstLayer方法;firstLayer中调用secondLayer方法。
  • 该测试程序中运行了两个线程:主线程main;和Thread-0线程。

F5/6/7/8

  • F6:(Step Over)单步执行每一行程序;
  • F8:(Resume)继续执行该程序直到下一个断点或程序结束;
  • F5: (Step Into)跳入一个方法内部;
  • F7:(Step Return)从当前方法内部跳出;

F6/8不用解释;F5/7需要说明一下的是:当一行中有多个方法时,第一次按F5,跳入第一个方法中,然后按F7从该方法中跳出。再按F5则跳入第二个方法,再按F7则从该方法中跳出。以此类推。方法的跳入跳出顺序是按照方法在该行的执行顺序来说的。如测试程序中的断点1处,有四个方法,分别是两个append方法、firstCall方法和secondCall方法。按F5和F7依次进入和跳出的顺序为firstCall–>append–>secondCall–>append.

Drop To Frame

官方解释:

Drop To Frame命令用来将程序退回到指定的栈结构的栈顶。通俗一点说:该命令可以将程序退回到之前执行过的每一个方法的开始处。如下图红框中所示。当前的断点在secondLayer处,如果此时点击Drop To Frame命令,则程序退回到secondLayer方法的第一行;如果先选中firstLayer所在的Stack Frame,然后点击Drop To Frame命令,则程序会直接退回到firstLayer方法的第一行。这就相当于可以回退程序,重复执行你关心的部分。

正如官方文档中所说,该功能有一定的限制:

  • 不能回退到最顶端的一个Stack Frame.(在本例中为main)
  • 虽然回退了程序,但是像static类型这样的全局数据内容不会被回退。
  • 本例中我在SecondLayer方法中创建了一个新的线程,在执行Drop To Frame回退到firstLayer方法第一行处后,创建的线程依然存在。

Eclipse调试(2)——各种类型断点设置

Eclipse调试(1)——基础篇的更多相关文章

  1. 《gdb调试之基础篇》

    <gdb调试之基础篇> http://blog.csdn.net/miss_acha/article/details/42346543

  2. [转]Eclipse插件开发之基础篇(3) 插件的测试与调试

    原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/17/eclipse_plugin_1_1_2.html 1. 使用JUnit对插件进行测试 E ...

  3. 关于Eclipse使用Git基础篇

    一:Git的下载与安装与基本使用 1.打开eclipse->help->Eclipse Markplace->search->fiind输入Egit 你会看到如下截图(我的为已 ...

  4. [转]Eclipse插件开发之基础篇(1) 插件开发的基础知识

    原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/13/eclipse_plugin_1_0_2.html 名词翻译 有一些名词在翻译的过程中可能 ...

  5. Eclipse插件开发之基础篇(4) OSGi框架

    转载出处:http://www.cnblogs.com/liuzhuo. 1. 什么是OSGi框架 OSGi(Open Service Gateway Initiative)框架是运行在JavaVM环 ...

  6. [转]Eclipse插件开发之基础篇(6) SWT简介

    原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/09/01/eclipse_plugin_1_3_1.html SWT(Standard Widget ...

  7. [转]Eclipse插件开发之基础篇(5) 制作OSGi Bundle

    原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/18/eclipse_plugin_1_2_2.html 1. 生成OSGi工程 首先打开新工程 ...

  8. [转]Eclipse插件开发之基础篇(4) OSGi框架

    原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/18/eclipse_plugin_1_2_1.html 1. 什么是OSGi框架 OSGi(O ...

  9. [转]Eclipse插件开发之基础篇(2) 第一个Eclipse插件

    原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/15/eclipse_plugin_1_1_1.html 在Eclipse中使用PDE(Plug ...

随机推荐

  1. [Micropython]TPYBoard v10x拼插编程实验 点亮心形点阵

    一.什么是TPYBoard开发板 TPYBoard是以遵照MIT许可的MicroPython为基础,由TurnipSmart公司制作的一款MicroPython开发板,它基于STM32F405单片机, ...

  2. springboot测试、打包、部署

    本文使用<springboot集成mybatis(一)>项目,依次介绍springboot测试.打包.部署. 大多数朋友是做后端的,也就是为其他系统或者前端UI提供Rest API服务. ...

  3. python3全栈开发-异常处理

    一. 什么是异常 异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止),在python中,错误触发的异常如下 而错误分成两种 ...

  4. JS刷票神器

    var all = document.querySelectorAll('td[width="80"]'); setInterval(function(){ document.ge ...

  5. [LeetCode] Subarray Sum Equals K 子数组和为K

    Given an array of integers and an integer k, you need to find the total number of continuous subarra ...

  6. 机器学习技法:14 Radial Basis Function Network

    Roadmap RBF Network Hypothesis RBF Network Learning k-Means Algorithm k-Means and RBF Network in Act ...

  7. [SCOI2008]配对

    题目描述 你有 n 个整数Ai和n 个整数Bi.你需要把它们配对,即每个Ai恰好对应一个Bp[i].要求所有配对的整数差的绝对值之和尽量小,但不允许两个相同的数配对.例如A={5,6,8},B={5, ...

  8. [USACO13OPEN]照片Photo

    题目描述 Farmer John has decided to assemble a panoramic photo of a lineup of his N cows (1 <= N < ...

  9. NOIP2014-9-6模拟赛

    工资 (money/money.in/money.out) 时限1000ms 内存256MB 聪哥在暑假参加了打零工的活动,这个活动分为n个工作日,每个工作日的工资为Vi.有m个结算工钱的时间,聪哥可 ...

  10. hdu 5115(2014北京—dp)

    题意: 有一排狼,每只狼有一个伤害A,还有一个伤害B.杀死一只狼的时候,会受到这只狼的伤害A和这只狼两边的狼的伤害B的和.如果某位置的狼被杀,那么杀它左边的狼时就会收到来自右边狼的B,因为这两只狼是相 ...