有没有办法转储堆栈跟踪而不会在java中引发异常?

我正在考虑为我的Java应用程序创建一个调试工具。

我想知道是否有可能获得堆栈跟踪,就像Exception.printStackTrace()但实际上并没有抛出异常?

我的目标是,在任何给定的方法中,转储堆栈以查看方法调用者是谁。


您还可以尝试使用Thread.getAllStackTraces()为所有活动的线程获取堆栈跟踪的映射。


是的,只需使用

Thread.dumpStack()

如果你想要跟踪当前线程(而不是系统中的所有线程,就像Ram的建议那样),请执行以下操作:

Thread.currentThread()。的getStackTrace()

要查找呼叫者,请执行以下操作:

private String getCallingMethodName() {
    StackTraceElement callingFrame = Thread.currentThread().getStackTrace()[4];
    return callingFrame.getMethodName();
}

并从需要知道其调用者是谁的方法中调用该方法。 但是,警告一句话:列表中调用框架的索引可能因JVM而异! 这完全取决于getStackTrace中有多少层调用,然后才能生成跟踪点。 更强大的解决方案是获取跟踪,并遍历它寻找getCallingMethodName的框架,然后再进一步查找真正的调用者。

链接地址: http://www.djcxy.com/p/82437.html

上一篇: Is there a way to dump a stack trace without throwing an exception in java?

下一篇: In C#, how can I rethrow InnerException without losing stack trace?