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 ...
随机推荐
- 初入HTML5
在最开始接触HTML5的时候,你会遇到的大多是一些常见常用的属性以及属性值.它们分类广.品种杂且使用率高.到css各种样式的时候,你会接触到更多的东西,各种属性.选择器.盒子模型都是重点.那么,现在我 ...
- 解决firefox不支持-webkit-line-clamp属性
转载声明: 请注明本文引用自http://www.cnblogs.com/guolizhi/ css中-webkit-line-clamp这个属性表示超过指定行的文本隐藏并且会在结尾加上...号,用起 ...
- [NOIp 2012]国王游戏
Description 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排,国 ...
- [USACO09DEC]牛收费路径Cow Toll Paths
跟所有人一样,农夫约翰以着宁教我负天下牛,休叫天下牛负我的伟大精神,日日夜夜苦思生 财之道.为了发财,他设置了一系列的规章制度,使得任何一只奶牛在农场中的道路行走,都 要向农夫约翰上交过路费. 农场中 ...
- 洛谷P3980:[NOI2008]志愿者招募
线性规划: #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring&g ...
- Codeforces Round #407 (Div. 1)
人傻不会B 写了C正解结果因为数组开小最后RE了 疯狂掉分 AC:A Rank:392 Rating: 2191-92->2099 A. Functions again 题目大意:给定一个长度为 ...
- ●SPOJ 8222 NSUBSTR - Substrings(后缀数组)
题链: http://www.spoj.com/problems/NSUBSTR/ 题解: 同届红太阳 --WSY给出的后缀数组解法!!! 首先用倍增算法求出 sa[i],rak[i],hei[i]然 ...
- linux x86内核中的分页机制
Linux采用了通用的四级分页机制,所谓通用就是指Linux使用这种分页机制管理所有架构的分页模型,即便某些架构并不支持四级分页.对于常见的x86架构,如果系统是32位,二级分页模型就可满足系统需求: ...
- Educational Codeforces Round 17F Tree nesting
来自FallDream的博客,未经允许,请勿转载, 谢谢. 给你两棵树,一棵比较大(n<=1000),一棵比较小(m<=12) 问第一棵树中有多少个连通子树和第二棵同构. 答案取膜1e9+ ...
- hdu 3433 A Task Process 二分+dp
A Task Process Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...