热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java如何找到程序入口_系统分析入门(如何确定java应用的入口)

一、场景小A拿到一个java的开源项目(如eclipse项目),此开源项目可以启动,并且已经拿到了该项目的源码,小A想对这个开源项目进行一

一、场景

小A拿到一个java的开源项目(如eclipse项目),此开源项目可以启动,并且已经拿到了该项目的源码,小A想对这个开源项目进行一次系统的学习。

二、问题:

这时候,小A遇到了一个问题,如何确定该项目的入口?

三、技巧:JPS与jstack应用

如果是一般的web应用还好说,我们可以不关心应用的入口,但现在是eclipse,所以能确定其程序的主入口对于分析该程序很有帮助。

那么如何确定其入口呢。由于此项目是java项目,我们都知道java程序的入口方法是main方法。可以以此作为突破口,从线程栈中找到main对应的线程,不就找到该程序的入口了吗。

四、实践

1、JPS确定该进程的ID号

首先启动该程序(eclipse),然后使用jps确定该进程的ID:

C:\Users\Administrator>JPS

4232

2、使用jstack导出线程的栈信息

C:\Users\Administrator>jstack 4232 > threadDump.log

3、查看threadDump.log

"main" prio=6 tid=0x020a9800 nid=0xdb4 runnable [0x0012f000]

java.lang.Thread.State: RUNNABLE

at org.eclipse.swt.internal.win32.OS.WaitMessage(Native Method)

at org.eclipse.swt.widgets.Display.sleep(Display.java:4652)

at org.eclipse.ui.application.WorkbenchAdvisor.eventLoopIdle(WorkbenchAdvisor.java:364)

at org.eclipse.ui.internal.ide.application.IDEWorkbenchAdvisor.eventLoopIdle(IDEWorkbenchAdvisor.java:917)

at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2702)

at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665)

at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499)

at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679)

at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)

at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668)

at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)

at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123)

at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)

at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)

at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)

at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)

at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)

at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)

at org.eclipse.equinox.launcher.Main.run(Main.java:1410)

找到main线程,注意最后一句

at org.eclipse.equinox.launcher.Main.run(Main.java:1410)由此可以确定

eclipse

的程序入口,好了,开始你的

eclipse

源码之旅吧



推荐阅读
author-avatar
手机用户3312丿075454
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有