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

支持debug或verbose模式 #52

Closed situch closed 12 years ago

situch commented 12 years ago

trace某个方法的时候,当该方法执行时,housemd就直接退出了,没有任何日志或异常信息。 不知道哪里出了问题,trace其他方法都正常,就是有一个方法每次都这样。 如果有debug或verbose也许能知道哪里出错了。

zhongl commented 12 years ago

在还没有提供debug支持之前, 你可以查看一下目标进程的标准输出, 若你将其重定向到文件的话, 应该能够方便的看到异常的堆栈信息.

situch commented 12 years ago

Hi

我检查了tomcat的日志,也没有异常信息。

命令如下:

housemd> trace -d -t 60 XxxIndexAction.executeInternal INFO : Probe class xxx.XxxIndexAction No traced method invoked

No traced method invoked

No traced method invoked

No traced method invoked

No traced method invoked

No traced method invoked

INFO : You can get invocation detail from /tmp/trace/xxx/detail INFO : Reset class xxx.XxxIndexAction

detail倒是会有一条记录: 2012-06-20 14:50:35 49ms [TP-Processor255] xxx.XxxIndexAction@5be6f926xxx/XxxIndexAction.executeInternal [ActionConfig[..] null

本来正常退出会有一条INFO : Ended by timeout的

在 2012年6月20日 下午3:04,Lunfu Zhong < reply@reply.github.com

写道:

在还没有提供debug支持之前, 你可以查看一下目标进程的标准输出, 若你将其重定向到文件的话, 应该能够方便的看到异常的堆栈信息.


Reply to this email directly or view it on GitHub: https://github.com/zhongl/HouseMD/issues/52#issuecomment-6446413

zhongl commented 12 years ago

呃, 这个确实有点诡异, 我怀疑可能有bug, 可惜我不知道该如何在我的环境中重现这个bug, 要不然我可以调调:)

situch commented 12 years ago
import javax.servlet.http.*;
import org.apache.struts.action.*;
public abstract class AAction extends Action {

    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
                                 HttpServletResponse response) throws Exception {
        return executeInternal(mapping, form, request, response);
    }

    protected abstract ActionForward executeInternal(ActionMapping mapping,
                                                         ActionForm form, HttpServletRequest request,
                                                         HttpServletResponse response);

}
import javax.servlet.http.*;
import org.apache.struts.action.*;
public class BAction extends AAction {

    protected ActionForward executeInternal(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {
        return null;
    }

}

我试了下,使用上面这两个类可以重现。 执行

trace -i 5 -t 15 BAction.executeInternal

访问BAction的时候housemd直接退出了

zhongl commented 12 years ago

我不太理解自动退出, 能够再多一点描述吗?

两个类再平常不过了, 与其它不过造成直接退出的类有什么区别吗?

能否通过loaded -h命令查看一下BAction 和另外不会造成直接退出的类的 类加载情况呢?

HouseMD的原理不会与具体的实现代码有关联, 但是和环境会有很大关系, 尤其是类加载器.

situch commented 12 years ago

正常情况下trace -i 5 -t 15 BAction.executeInternal会等15秒后退出,同时方法被调用时会打印trace信息。 但是现在executeInternal被调用时,housemd立即打出以下信息,同时退出trace模式:

INFO : Reset class xxx.XxxIndexAction

我trace过BAction的其他方法,都是能正常输出的,从这点来看的话估计不是classloader的问题。 executeInternal特别的地方在于实现了父类的抽象方法,不知道会不会这地方存在问题?

要不等housmd支持windows了,我再在本地调试看看吧。

zhongl commented 12 years ago

嗯, 不是ClassLoader的问题.

我打了一个特别的包, 在这里< http://vdisk.weibo.com/s/7iTXP>, 请使用它重现一下上述问题, 看是否有异常的堆栈输出.

situch commented 12 years ago

恩,这次有异常信息了:

housemd> trace -i 5 -t 30 XxxAction.executeBlogInternal
INFO : Probe class xxx.XxxAction
No traced method invoked

No traced method invoked

No traced method invoked

INFO : Reset class xxx.XxxIndexAction
ERROR: java.lang.NullPointerException
    com.github.zhongl.housemd.command.Trace$Statistic$$anonfun$methodSign$1.apply(Trace.scala:108)
    com.github.zhongl.housemd.command.Trace$Statistic$$anonfun$methodSign$1.apply(Trace.scala:108)
    scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:233)
    scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:233)
    scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:34)
    scala.collection.mutable.ArrayOps.foreach(ArrayOps.scala:38)
    scala.collection.TraversableLike$class.map(TraversableLike.scala:233)
    scala.collection.mutable.ArrayOps.map(ArrayOps.scala:38)
    com.github.zhongl.housemd.command.Trace$Statistic.methodSign(Trace.scala:108)
    com.github.zhongl.housemd.command.Trace$$anon$1.exitWith(Trace.scala:76)
    com.github.zhongl.housemd.command.TransformCommand$$anon$2.exitWith(TransformCommand.scala:61)
    com.github.zhongl.housemd.instrument.Transform$$anonfun$handleAdviceEvent$1.apply(Transform.scala:87)
    com.github.zhongl.housemd.instrument.Transform$$anonfun$handleAdviceEvent$1.apply(Transform.scala:83)
    scala.actors.Actor$class.receiveWithin(Actor.scala:630)
    scala.actors.ActorProxy.receiveWithin(ActorProxy.scala:20)
    scala.actors.Actor$.receiveWithin(Actor.scala:208)
    com.github.zhongl.housemd.instrument.Transform.handleAdviceEvent(Transform.scala:83)
    com.github.zhongl.housemd.instrument.Transform.apply(Transform.scala:67)
    com.github.zhongl.housemd.command.TransformCommand.run(TransformCommand.scala:65)
    com.github.zhongl.yascli.Suite$class.run(Suite.scala:51)
    com.github.zhongl.yascli.Shell.run(Shell.scala:27)
    com.github.zhongl.yascli.Shell.parse$1(Shell.scala:50)
    com.github.zhongl.yascli.Shell.interact(Shell.scala:58)
    com.github.zhongl.yascli.Shell.main(Shell.scala:33)
    com.github.zhongl.housemd.duck.Telephone.run(Telephone.scala:53)
    java.lang.Thread.run(Thread.java:662)
zhongl commented 12 years ago

好吧, 这是个bug, 我得紧急修复一下.