在java中获取调用层次结构

在java中获取调用层次结构,java,call,hierarchy,Java,Call,Hierarchy,我在追踪一个bug时遇到了很大的困难,知道哪个方法叫做某个方法会有很大帮助。有没有一种从java获取调用层次结构的简单方法?Java是应用程序的一小部分,因此我无法在eclipse/NETBeans中编译和运行整个应用程序,因此我无法访问IDE调试器的调用层次结构 您是否尝试过使用Java的远程调试功能? 或 这相当慢,但对于调试来说还可以 最好的方法是抛出一个异常,立即捕获它并分析堆栈跟踪 我相信这就是Log4J记录调用方法的能力 Java是应用程序的一小部分,因此我无法在eclipse/N

我在追踪一个bug时遇到了很大的困难,知道哪个方法叫做某个方法会有很大帮助。有没有一种从java获取调用层次结构的简单方法?Java是应用程序的一小部分,因此我无法在eclipse/NETBeans中编译和运行整个应用程序,因此我无法访问IDE调试器的调用层次结构

您是否尝试过使用Java的远程调试功能?


这相当慢,但对于调试来说还可以

最好的方法是抛出一个异常,立即捕获它并分析堆栈跟踪

我相信这就是Log4J记录调用方法的能力

Java是应用程序的一小部分,因此我无法在eclipse/NETBeans中编译和运行整个应用程序,因此我无法访问IDE调试器的调用层次结构

你根本不需要运行这个应用程序。如果在Eclipse中创建项目,可以使用其内置的调用层次结构工具查找调用方法的所有可能位置


有一个折衷办法:调用层次工具将提供调用方法的所有位置。如果你想/需要知道所有的可能性,这是一个很好的选择。Neslon建议的
Thread.currentThread().getStackTrace()
将为您提供在编程过程中调用方法的位置。细微差别在于,在调用过程中,您可能不会遍历每个代码路径。如果您看到了特定的行为,并且想知道您是如何做到这一点的,请使用
getStackTrace()
选项。

和Thread.dumpStack()或类似的选项,无需抛出人工异常。这是log4j的正确做法。我认为这只是出于历史原因,因为Java 1.5提供了Nelson建议的currentThread().getStackTrace()方法,因此不再需要这种方法。听起来你真的想要堆栈跟踪,而不是调用层次结构。(是否可以编辑问题的主题?)堆栈跟踪是一个调用层次结构,除非我遗漏了一些细微的区别。调用继承人权限是一个过程可以从中调用的所有位置的树。我必须同意Stephen C的观点,你指的是堆栈跟踪。
Thread.currentThread().getStackTrace();
Exception ex = new Exception();
ex.printStackTrace();