Eclipse调试(1)——基础篇
作为使用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调试(1)——基础篇的更多相关文章
- 《gdb调试之基础篇》
<gdb调试之基础篇> http://blog.csdn.net/miss_acha/article/details/42346543
- [转]Eclipse插件开发之基础篇(3) 插件的测试与调试
原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/17/eclipse_plugin_1_1_2.html 1. 使用JUnit对插件进行测试 E ...
- 关于Eclipse使用Git基础篇
一:Git的下载与安装与基本使用 1.打开eclipse->help->Eclipse Markplace->search->fiind输入Egit 你会看到如下截图(我的为已 ...
- [转]Eclipse插件开发之基础篇(1) 插件开发的基础知识
原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/13/eclipse_plugin_1_0_2.html 名词翻译 有一些名词在翻译的过程中可能 ...
- Eclipse插件开发之基础篇(4) OSGi框架
转载出处:http://www.cnblogs.com/liuzhuo. 1. 什么是OSGi框架 OSGi(Open Service Gateway Initiative)框架是运行在JavaVM环 ...
- [转]Eclipse插件开发之基础篇(6) SWT简介
原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/09/01/eclipse_plugin_1_3_1.html SWT(Standard Widget ...
- [转]Eclipse插件开发之基础篇(5) 制作OSGi Bundle
原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/18/eclipse_plugin_1_2_2.html 1. 生成OSGi工程 首先打开新工程 ...
- [转]Eclipse插件开发之基础篇(4) OSGi框架
原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/18/eclipse_plugin_1_2_1.html 1. 什么是OSGi框架 OSGi(O ...
- [转]Eclipse插件开发之基础篇(2) 第一个Eclipse插件
原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/15/eclipse_plugin_1_1_1.html 在Eclipse中使用PDE(Plug ...
随机推荐
- angularJs-route路由详解
本篇基于ng-route来讲下angular中的路由,路由功能主要是 $routeProvider服务 与 ng-view 实现. ng-view的实现原理,是根据路由的切换,动态编译html模板-- ...
- 区块链3.0:拥抱EOS
EOS是当下最火的区块链技术,被社会广泛看好为下一代区块链3.0.不同于以太坊的学习,EOS的主语言是C++,本文作为EOS研究的首篇文章,重点介绍EOS的创新点,它的周边生态,各种概念原理的解释,以 ...
- ashx页面怎么调用Handler的Session
aspx里面直接可以用Session["Name"]进行赋值和取值,ashx中就得继承接口IRequiresSessionState.然后使用! 实现: public class ...
- openfire3.10.0 在mac10.10.3,jdk1.8中,安装后无法打开的解决方案
先展示一下错误 解决方案很简单,卸载jdk,openfire之后,重新安装就行 步骤如下: (1)卸载jdk1.8 终端依次执行下面的命令 sudo rm -fr /Library/Internet\ ...
- c#之异步Socket通信
0.基于上一篇的c#之Socket(同步)通信,在几个大神评论之后,发现是有挺多地方不足的,所以写了一个改进版本的基于c#的异步Socket通信.再加深一下对Socket的使用和理解.其中客户端和服务 ...
- [JSOI2008]最大数
题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当前数列的长度. 2. 插入操作 ...
- 素数密度_NOI导刊2011提高(04)
题目描述 给定区间[L, R](L <= R <= 2147483647,R-L <= 1000000),请计算区间中素数的个数. 输入 两个数 L 和 R. 输出 一行,区间中素数 ...
- Codeforces 812E Sagheer and Apple Tree
大致题意: 给你一颗树,这个树有下列特征:每个节点上有若干个苹果,且从根节点到任意叶子节点的路径长度奇偶性相同. 甲和乙玩(闲)游(得)戏(慌). 游戏过程中,甲乙轮流将任意一个节点的若干个苹果移向它 ...
- bzoj 4542: [Hnoi2016]大数
Description 小 B 有一个很大的数 S,长度达到了 N 位:这个数可以看成是一个串,它可能有前导 0,例如00009312345 小B还有一个素数P.现在,小 B 提出了 M 个询问,每个 ...
- HDU 4787 GRE Words Revenge
Description Now Coach Pang is preparing for the Graduate Record Examinations as George did in 2011. ...