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

bug: attach方式不生效, agent方式正常 #203

Closed
hust419 opened this issue Jul 30, 2019 · 4 comments
Closed

bug: attach方式不生效, agent方式正常 #203

hust419 opened this issue Jul 30, 2019 · 4 comments
Assignees
Labels

Comments

@hust419
Copy link

hust419 commented Jul 30, 2019

表现现象: 宿主应用为: logback + slf4j版本(1.7.12),对logback里的Logger.java进行增强,agent测试可以,但是attach方式不生效。打开debug日志发现是抛异常了。
2019-07-29 16:54:10 sunfire DEBUG remove from findForReTransform, because loading class:ch.qos.logback.classic.Logger occur an exception
com.alibaba.jvm.sandbox.core.util.UnCaughtException: java.lang.NoClassDefFoundError: org/slf4j/event/LoggingEvent
at com.alibaba.jvm.sandbox.core.util.LazyGet.get(LazyGet.java:27)
at com.alibaba.jvm.sandbox.core.util.matcher.structure.ClassStructureImplByJDK.getBehaviorStructures(ClassStructureImplByJDK.java:240)
at com.alibaba.jvm.sandbox.core.util.matcher.ExtFilterMatcher.matching(ExtFilterMatcher.java:89)
at com.alibaba.jvm.sandbox.core.util.matcher.GroupMatcher$Or.matching(GroupMatcher.java:30)
at com.alibaba.jvm.sandbox.core.util.matcher.GroupMatcher$And.matching(GroupMatcher.java:52)

原因分析:
DefaultModuleEventWatcher的watch方法里有一句, final List<Class<?>> waitingReTransformClasses = classDataSource.findForReTransform(matcher);
方法,这个方法是会反射拿到waitingReTransformClasses的方法结构,由于slf4j的类不存在,所以报错了。
由于agent启动方式的时候,宿主的logback还未加载起来,所以这里不会报错。而attach方式的时候这里已经加载起来了,所以报错了。

接着,agent的方式,在宿主的classloader的logback第一次被加载的时候,触发了SandboxClassFileTransformer,走入了正常的流程,所以正常加载。而attach模式因为这个类已经被加载过了,而reTransformer的时候抛异常了,所以永远不会再被加载了。

注意的是,agent的方式,classBeingRedefined = null, 所以这里拿结构使用的是ClassStructureImplByAsm,所以不会报错。

@oldmanpushcart
Copy link
Collaborator

能不能把完整的日志堆栈发一下?这里看不到一些关键信息

@oldmanpushcart oldmanpushcart self-assigned this Aug 31, 2019
@oldmanpushcart
Copy link
Collaborator

丫的,今天仔细想,想明白了你说的这个问题。我在1.2.3中尝试解决,但因为比较难用测试用例重现,所以期望你能测试下1.2.3-SNAPSHOT

oldmanpushcart pushed a commit that referenced this issue Dec 6, 2019
@hust419
Copy link
Author

hust419 commented Dec 8, 2019

我已经离职了,没有继续这方面的工作了,所以没有办法测试了,还是比较容易复现的

@oldmanpushcart
Copy link
Collaborator

I'm so sorry to hear that, 希望新的工作岗位开心愉快~

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

No branches or pull requests

2 participants