java如何到程序⼊⼝_系统分析---⼊门(如何确定java应⽤的
⼊⼝)
⼀、场景
⼩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
lipse.swt.internal.win32.OS.WaitMessage(Native Method)
lipse.swt.widgets.Display.sleep(Display.java:4652)
lipse.ui.application.WorkbenchAdvisor.eventLoopIdle(WorkbenchAdvisor.java:364)
lipse.ui.internal.ide.application.IDEWorkbenchAdvisor.eventLoopIdle(IDEWorkbenchAdvisor.java:917)
lipse.ui.internal.Workbench.runEventLoop(Workbench.java:2702)
lipse.ui.internal.Workbench.runUI(Workbench.java:2665)
lipse.ui.internal.Workbench.access$4(Workbench.java:2499)
lipse.ui.internal.Workbench$7.run(Workbench.java:679)
databinding.observable.Realm.runWithDefault(Realm.java:332)
开源项目
lipse.ui.ateAndRunWorkbench(Workbench.java:668)
lipse.ateAndRunWorkbench(PlatformUI.java:149)
lipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123)
lipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
untime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) untime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
untime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
untime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
flect.NativeMethodAccessorImpl.invoke0(Native Method)
flect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
flect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at flect.Method.invoke(Method.java:597)
lipse.equinox.launcher.Main.invokeFramework(Main.java:622)
lipse.equinox.launcher.Main.basicRun(Main.java:577)
lipse.equinox.launcher.Main.run(Main.java:1410)
到main线程,注意最后⼀句
lipse.equinox.launcher.Main.run(Main.java:1410)由此可以确定
eclipse
的程序⼊⼝,好了,开始你的
eclipse
源码之旅吧

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。