【发布时间】:2012-06-30 12:47:51
【问题描述】:
是否可以使用任何工具查看我的应用程序中给定方法的调用堆栈的完整列表?
我想看到在 JProfiler 中针对给定方法看到的类似结果。
但是,我正在寻找一些开源/免费的替代方案,而无需进行过多的配置设置。
【问题讨论】:
-
您可以编辑方法并让它在调用后立即打印堆栈跟踪吗?
是否可以使用任何工具查看我的应用程序中给定方法的调用堆栈的完整列表?
我想看到在 JProfiler 中针对给定方法看到的类似结果。
但是,我正在寻找一些开源/免费的替代方案,而无需进行过多的配置设置。
【问题讨论】:
我不确定,但也许您正在寻找类似这种方法的东西
class MyInfo{
static void showStack(){
try{
throw new Exception();
}catch(Exception e){
StackTraceElement[] ste=e.getStackTrace();
for(int i=1; i<ste.length;i++){
System.out.println(ste[i].getClassName()+"."+ste[i].getMethodName());
}
}
}
}
试试看
class C1 {
void methodA() {MyInfo.showStack();}
void methodB() {methodA();}
}
class C2 {
static void methodX() {
C1 c1 = new C1();
c1.methodB();
};
//TEST
public static void main(String[] args) {
C2.methodX();
}
}
出来
C1.methodA
C1.methodB
C2.methodX
C2.main
【讨论】:
jdk 附带的JConsole 有一个Threads 选项卡,列出了所有正在运行的线程。当您选择一个时,它将显示跟踪。您无需任何设置即可连接到本地进程。如果您是远程用户,则必须启用远程连接器作为启动选项。屏幕截图来自 jdk 1.7。
【讨论】:
这会让你得到你想要的吗?
【讨论】: