首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得正确的堆栈跟踪而不是反射堆栈跟踪?

如何获得正确的堆栈跟踪而不是反射堆栈跟踪?
EN

Stack Overflow用户
提问于 2011-07-20 21:01:47
回答 1查看 878关注 0票数 2

我有一个很大的red5项目,似乎在某个时刻,一个函数正在被执行。我试着在我的代码中找出为什么这个特定的函数是在那个时候执行的,但是我找不到它。我想知道这是怎么回事。

我通读了stackoverflow中的答案,发现以下内容显示了当前位置的堆栈跟踪信息。

代码语言:javascript
复制
    StackTraceElement[] elements = Thread.currentThread().getStackTrace();
    for (int i=0;i<elements.length;i++) {
        log.error(elements[i].toString());
    }

我收到了以下输出:

代码语言:javascript
复制
java.lang.Thread.getStackTrace(Thread.java:1479)
component.lobby.LobbyMysql.getChallenges(LobbyComponentMysql.java:76)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.apache.commons.beanutils.BeanMap.get(BeanMap.java:390)
org.red5.io.amf.Output.writeObject(Output.java:357)
org.red5.io.object.Serializer.writeObjectType(Serializer.java:300)
org.red5.io.object.Serializer.writeComplex(Serializer.java:140)
org.red5.io.object.Serializer.serialize(Serializer.java:86)
org.red5.io.amf.Output.writeObject(Output.java:357)
org.red5.io.object.Serializer.writeObjectType(Serializer.java:300)
org.red5.io.object.Serializer.writeComplex(Serializer.java:140)
org.red5.io.object.Serializer.serialize(Serializer.java:86)
...

我确实得到了正在执行的函数的名称,但出于某种原因,顶层是反射类。有没有办法找出调用这个特定函数的实际方法?

我不喜欢Java和思考,所以请耐心听我说:)

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-20 21:10:33

显然,“实际”代码使用的是反射,所以这就是您将在堆栈跟踪中看到的。

如果可以在调试模式下运行代码,请使用断点而不是打印堆栈跟踪。当命中断点时,查看挂起线程的调用堆栈中发生了什么,特别是在这一层附近:

代码语言:javascript
复制
java.lang.reflect.Method.invoke(Method.java:597)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6762367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档