有没有办法转储堆栈跟踪而不会在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?