Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Neon.3 Release (4.6.3)的调试问题仍然存在 #27

Open
gvortex opened this issue Aug 4, 2017 · 12 comments
Open

Neon.3 Release (4.6.3)的调试问题仍然存在 #27

gvortex opened this issue Aug 4, 2017 · 12 comments

Comments

@gvortex
Copy link

gvortex commented Aug 4, 2017

已经安装最新版本的插件,2.9.14.20170714,但还是不能进行调试,点击调试模式,反编译出来的代码没有行数提示,打断点进行调试的时候,可能拦截到断点,但页面显示source not found,无法看着代码进行调试,希望作者能把这个问题修复。

@cnfree
Copy link
Owner

cnfree commented Aug 4, 2017

反编译出来的代码没有行数提示,说明你这个jar编译的时候没有行号信息,这种jar是不能被debug的。

一些未开源的商业jar包,没有行号信息是正常的,目的就是为了防止别人窃取代码。

@gvortex
Copy link
Author

gvortex commented Aug 4, 2017

这是一个maven管理的项目,相关依赖已经在pom文件里配置好了,maven debug里对source也做了配置,还需要配置其它地方吗?我又试了一下那种配置server的项目,是可以调试的,目前推测可能是maven的缘故吧,maven默认也会下载source文件,下载完成后,会使得反编码功能失效,行号消失,反编码功能也没法正常使用了

@cnfree
Copy link
Owner

cnfree commented Aug 4, 2017

和Maven无关,插件兼容Maven插件,如果是Maven项目,优先使用Maven插件的项目下载源码。如果Maven无法下载源码,插件会按照自己的搜寻逻辑下载代码。如果没有忽略源代码,是优先使用下载的源代码的,而不会去反编译Class。

如果使用的是源代码,是无需行号信息,只有反编译出来的代码才需要行号。插件会判断是源代码还是反编译的代码。

至于 source not found,如果是远程debug的话,有可能是包含class的jar包没有包含在Debug的ClassPath里面,需要设置一下。把包含Class的jar包添加到ClassPath里面。

image

如果不是远程debug,能不能把截几张相关的图片给我看一下。我模拟一下环境测试一下。

@gvortex
Copy link
Author

gvortex commented Aug 4, 2017

source
default
default
default
把jar包添加到source下还是无法正常调试

@cnfree
Copy link
Owner

cnfree commented Aug 4, 2017

你这个是在 Maven Build 里debug吗?

在Maven Test里debug?我没用过这个Case。

怎么能够通过Maven Build进入应用的断点?我在Test case里设置断点,然后运行Maven Build,不会进入断点。

@gvortex
Copy link
Author

gvortex commented Aug 7, 2017

是的,用的是maven build里的debug,插件用的是tomcat-maven-plugin

<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.1</version>

mavenbuild

@gvortex
Copy link
Author

gvortex commented Aug 8, 2017

default
default
default
把源代码添加到source里,当拦截到断点时,会另外打开一个页面,把sources.jar里的文件打开了,而没有跳转到class的反编译页面

@gvortex
Copy link
Author

gvortex commented Aug 8, 2017

default
普通的web项目的启动配置里也没有对classpath做特殊配置,但也能正常断点呀,并不是之前说的得把jar包配置到classpath里,是不是在Build Path里配置一下lib就行了呀
default

@cnfree
Copy link
Owner

cnfree commented Aug 8, 2017

最终能否调用反编译插件,是和Eclipse的JDT(Java Debug Tool)插件行为有关。普通Web项目是WTP插件完成的,它扩展了JDT,有自己的debug机制。Maven 插件我看了下,应该是同时扩展了JDT和WTP。

要调用反编译插件,首先需要找到对应的Class,这个由JDT来控制的。反编译插件本身对此无能为力。

@cnfree
Copy link
Owner

cnfree commented Aug 8, 2017

image

只要是Libaray下的Class,都在Classpath下面,都可以调用反编译插件。这里面当然也包括了Web App Libraries

@gvortex
Copy link
Author

gvortex commented Aug 9, 2017

default
Maven项目中,java build path里的libraries已经有class所对应的jar包了,也就是说Maven所用的jar包都已经在classpath下了,但现在只能反编译,但不能进行debug调试,是由于Maven插件的问题导致的?是这样理解的吗?但同时你也说了,Maven插件同时扩展了JDT和WTP,按这个逻辑,Maven插件应该没有问题的呀,应该可以进行Debug调试的呀,但现在没法进行Debug调试,是因为Maven插件对JDT和WTP扩展的不对导致的吗?现在不能进行正常调试是哪个地方的问题导致的?咱们自己有没有办法去解决它呢?在后续版本中能不能解决,还是说反编译插件已经无能为力,只能让其它插件(如Maven插件)做调整才能解决这个问题?

@cnfree
Copy link
Owner

cnfree commented Aug 9, 2017

Debug跟了一下,Maven Build时,debug 搜寻代码是通过 org.eclipse.m2e.internal.launch.MavenSourceLocator 完成的。

image

参照debug栈信息得知,对于Maven Build Debug过程中的代码搜寻工作,是由Maven 插件完成的。搜寻的路径包括JRE 相关的ClassPath的jar,Maven Debug配置项里的ClassPath中的jar。但是它不会返回Maven Debug里的ClassPath 的jar,而是返回Maven Debug ClassPath 里的jar的对应source jar包。因此它会直接用org.eclipse.jdt.ui.CompilationUnitEditor打开查找到的Java文件。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants