使用Eclipse调试Eclipse源码

摘自:http://blog.csdn.net/dingdong250/article/details/4951741


使用Eclipse调试Eclipse源码

 

近期拜读eclipse的源码,第一件事,当然是把源代码搞下来,放到IDE中,debug一番。然后当爽的晕头转向的时候,估计很多东西,就混的脸熟了。有句话,叫“蹬鼻子上脸”,这不也就是说,混脸熟很重要嘛。(ps:总感觉这句话不怎么恰当,嘿嘿。) 

 

第一件事,搞IDE,搞Source。

版本选择原因,由于网上的一番搜索,有若干篇文章,是用于eclipse3.1.1来作为讲解的内容的,不要跟已有的资源过不去,等吸收了之后,再考虑最新版本。

      个人看法,从旧一些版本向新版本转换时,变动属于能承受范围,可是如果拿着版本不相符的东东去对比学习已有资源,只能越看越崩溃,然而本片主要讲怎么用eclipse调试eclipse源码,跟版本也几乎没啥联系,所以各位仁兄,版本自己看着合适的选取好了,再说下去,越说越跑题。

 

下载

JDK:

    去sun主页,自己寻找,应该jdk1.5以上都可以。--http://www.sun.com.

Eclipse3.1.1:

    http://archive.eclipse.org/eclipse/downloads/drops/R-3.1.1-200509290840/index.php

下载链接

Eclipse3.5.1:

http://download.eclipse.org/eclipse/downloads/drops/R-3.5.1-200909170800/index.php

下载链接

(ps:附一个新的IDE,因为eclipse3.5.1,有些地方进行了改动,偶还得重新学过,5555)

 

都下载齐全了,那么我们接下来,只以eclipse3.1.1为标准来讨论了。

 

运行eclipse3.1.1 SDK,用做IDE.

把eclipse-sourceBuild-srcIncluded-3.1.1.zip解压缩,同时把其中的....../plugins,作为IDE的wokespace,进行设定。

(ps:如果把父目录,作为workspace,eclipse3.1.1会报一个overlap的错误,而eclipse3.5.1则没有这回事,还是新东东好。)

 

方法一:

设定之后,开始源码设定,其实这里有一个很懒的方法,同时也很烂。

懒,是因为,这样设定一个目录,就可以调试。

烂,是因为,如果没有将源码逐个导入,则无法进行breakpoint设定,watch等。虽然可以F5,F6,但是总感觉很不爽。

懒烂方法,如下

Windows->Reference,

Plugin-in Development->Target Platform,

选择Source Code Loaction

直接在additional source code locations中添加一个刚才解压缩目录就可以了。(如图)

然后

Imports...,Existing Projects into Workspace,Brows,

来到我们加压后的....../plugins,选中其中子目录org.eclipse.platform,

即可调试运行了。

懒方法设定

 

方法二:

还是好好勤劳一点,鼓捣出一个方便易懂,易使用的好方法吧,嘿嘿。

这个方法,能调试,能设断点,能watch,能代码定义跳转,好处不多说了。

好方法,如下

1.导入解压后的两个项目,只以两个项目为例,因为第一个项目,是启动项目,需要它来启动,然后才能进入其他的调试。

第二个,是因为,该项目为eclipse的核心部分,OSGi的实现,同时兼顾着其他的项目如何导入,如何避免冲突的示范作用。

开始吧,

Imports...,Existing Projects into Workspace,Brows,

来到我们加压后的....../plugins,选中其中子目录org.eclipse.platform,

 

Imports...,Existing Projects into Workspace,Brows,

来到我们加压后的....../plugins,选中其中子目录org.eclipse.osgi,

两个项目导入后,无法编译,会提示5个error,是来自于osgi的,其实,是缺少4个jar文件,好吧,搞定它。

四个jar地址

collx.jar:

http://dev.eclipse.org/viewsvn/index.cgi/equinox-incubator/org.eclipse.osgi/osgi/collx.jar?view=log&sortby=rev&pathrev=dynamic
ee.minimum.jar:

http://dev.eclipse.org/viewsvn/index.cgi/equinox-incubator/org.eclipse.osgi/osgi/ee.minimum.jar?view=log&sortby=rev&pathrev=v20041201
exceptions.jar:

http://dev.eclipse.org/viewsvn/index.cgi/equinox-incubator/org.eclipse.osgi/osgi/exceptions.jar?view=log&pathrev=v20041027
xmlParserAPIs.jar:

http://dev.eclipse.org/viewsvn/index.cgi/org.apache.xerces/xmlParserAPIs.jar?view=log

下载后,放到org.eclipse.osgi的/osgi问加价下,即可。或者,参看project 属性,Java Build Path,Library。

放好后,直接将org.eclipse.osgi项目,refresh刷新即可。错误就没有了。

启动设定,

对项目org.eclipse.platform,右键,Debug As->Debug...(如下图)

设定插件的选取原则:为了第一次能够顺利debug,最好跟我一样的设定就好了。

至于Workspace Plugin-in,还是External Plug-ins,以后根据自己需要进行适当选取。

我的选择是Workspace Plugin-in只选择了org.eclipse.platform

相应的External Plug-ins仅仅去掉了org.eclipse.platform

(ps:为了调试时候能够负担轻,或许其中的取舍,也有不少利弊呢,可是这不属于此文探讨范围了。)

这样,就不存在插件冲突了。插件选取设定

 

 

然后设定源码,如图

Source选项,Add,然后选择Java Project,选择我们的org.eclipse.osgi项目,点击ok就可以了。

设定完毕之后,记得点apply哦。不然,嘿嘿,从来吧就得。

那么,我们去org.eclipse.platform的org.eclipse.core.launcher.Main中,

在public static void main(String[] args) {......}中,设置一个断点,然后开始debug吧。

嘿嘿,成功了呢。

 源码设定

 

额外补充一:

 

1.org.eclipse.platform项目

org.eclipse.core.launcher.Main类

main(......);方法 调用了run(......);方法

run(......);方法 调用了basicRun(......);方法

basicRun(......);方法 调用了invokeFramework(......);方法

invokeFramework(......);方法 调用了org.eclipse.core.runtime.adaptor.EclipseStarter类的run(......)方法。

 

 

2.org.eclipse.osgi项目

org.eclipse.core.runtime.adaptor.EclipseStarter类

run(......);方法 调用了startup(......);方法

startup(......);调用了org.eclipse.osgi.framework.internal.core.OSGi的构造函数

 

org.eclipse.osgi.framework.internal.core.OSGi类

OSGi的构造方法 调用了createFramework(......);方法

createFramework(......);方法 调用了org.eclipse.osgi.framework.internal.core.Framework的构造方法。

 

至此,OSGi和Framework,顺利走过。

其他的地方调试步骤,不再多说,如有其它项目添加,如上即可。

 

额外补充二:

由于eclipse3系列开始,采用哦OSGi机制,具体eclipse源码分析,和osgi应用,可以参照网上若干文章。

 

分析Eclipse源代码,理解OSGI插件机制内幕:

http://blog.csdn.net/s00n/archive/2006/04/05/652150.aspx

OSGi规范:

http://blog.csdn.net/s00n/archive/2006/04/05/652157.aspx

Eclipse(3.1) Plugin Framework(基于OSGI的Plugin Architecture)

 http://blog.csdn.net/s00n/archive/2006/04/05/652163.aspx

 

等。已经超出本文范围,此文到此结束。

 

注:

此文绝对菜鸟级文章,菜鸟绝对能对,至于有人如果说看不懂,估计应该还是一枚卵,还是先孵化完毕,再说吧。

此文为个人总结,如有觉得不妥之处,还望高手不吝指教,有则改之,无则加勉。

 

权益声明如下图。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值