CSUG / HouseMD

HouseMD is an awesome diagnosing tool better than BTrace
http://csug.github.io/HouseMD/
Apache License 2.0
700 stars 218 forks source link

loaded结果不对 #61

Closed xumingming closed 12 years ago

xumingming commented 12 years ago

我这两天在诊断一个包冲突的问题,用housemd的loaded去查看,他显示com.taobao.remoting.impl.ConnectionRequest是从我们的war包里面的一个jar包里面加载出来的,但是当我实际调试进去的时候我用

obj.getClass().getProtectionDomain().getCodeSource().getLocation().getFile()

结果显示这个类是从/usr/alibaba/jetty7.3.1/hsf.configuration/org.eclipse.osgi/bundles/26/1/.cp/network.core-1.2.7.4.jar这个包里面加载出来的,不知道这个问题是不是跟hsf本身用了自己的什么类加载器有关。

zhongl commented 12 years ago

呃, 我想结果不一致的原因应该是, HouseMD是通过Class.getResource(name).getFile(), 请见Utils.scala44行.

Class.getResource(name)是委派给它的ClassLoader.getResource(name), 这样会有你怀疑的问题, HSF中自定义的ClassLoader没有覆写getResource(name), 也就是说还是按照现在找父后找自己的逻辑, 这恐怕就是不一致问题的关键.

看来的通过CodeSource来找, 不过这会有个小问题, 我那java.lang.String做了个实验, 它的CodeSourcenull, 这貌似意味着BootClassLoader加载的类都将无法获知路径.

这个问题我修正一下, 优先从CodeSource中找, 如果为null的话, 通过getResource来查.

xumingming commented 12 years ago

我试了一下对了。

zhongl commented 12 years ago

嗯, 这验收测试做的超级到位啊!!!