Closed situch closed 12 years ago
在还没有提供debug
支持之前, 你可以查看一下目标进程的标准输出, 若你将其重定向到文件的话, 应该能够方便的看到异常的堆栈信息.
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
呃, 这个确实有点诡异, 我怀疑可能有bug
, 可惜我不知道该如何在我的环境中重现这个bug
, 要不然我可以调调:)
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直接退出了
我不太理解自动退出, 能够再多一点描述吗?
两个类再平常不过了, 与其它不过造成直接退出的类有什么区别吗?
能否通过loaded -h
命令查看一下BAction 和另外不会造成直接退出的类的 类加载情况呢?
HouseMD
的原理不会与具体的实现代码有关联, 但是和环境会有很大关系, 尤其是类加载器.
正常情况下trace -i 5 -t 15 BAction.executeInternal
会等15秒后退出,同时方法被调用时会打印trace信息。
但是现在executeInternal
被调用时,housemd立即打出以下信息,同时退出trace模式:
INFO : Reset class xxx.XxxIndexAction
我trace过BAction的其他方法,都是能正常输出的,从这点来看的话估计不是classloader的问题。
executeInternal
特别的地方在于实现了父类的抽象方法,不知道会不会这地方存在问题?
要不等housmd支持windows了,我再在本地调试看看吧。
嗯, 不是ClassLoader
的问题.
我打了一个特别的包, 在这里< http://vdisk.weibo.com/s/7iTXP>, 请使用它重现一下上述问题, 看是否有异常的堆栈输出.
恩,这次有异常信息了:
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)
好吧, 这是个bug, 我得紧急修复一下.
trace某个方法的时候,当该方法执行时,housemd就直接退出了,没有任何日志或异常信息。 不知道哪里出了问题,trace其他方法都正常,就是有一个方法每次都这样。 如果有debug或verbose也许能知道哪里出错了。