相关疑难解决方法(0)

Thread.getStackTrace()有多昂贵?

在日志记录系统中,每个日志输出都由辅助类完成,并使用此方法

public void debug(String message) {
    Logger logger = Logger.getLogger(getCallingClass());
    logger.debug(message);
}
...
public Class getCallingClass() {
/*
Calls Thread.getStackTrace() and back traces until the class on the stack trace 
!= this.getClass(). 
*/
    return classFound;
}
Run Code Online (Sandbox Code Playgroud)

它的运行成本有多高,是否会有显着的性能提升?

java logging

17
推荐指数
4
解决办法
2万
查看次数

如何获取正在运行的应用程序的Java Call Stack

我正在研究非常庞大的基于Java web的应用程序.由于在开发过程中没有进行适当的日志记录,因此我很难设置断点并调试应用程序,因为我不知道执行顺序.在执行某些操作后,是否有任何机制可以获取正在运行的java应用程序的完整Call Stack.

我在网上搜索了很长时间,但无法找到具体的解决方案.如果有什么东西请建议我.谢谢

java debugging callstack

14
推荐指数
3
解决办法
2万
查看次数

获取封闭方法的名称

有这个方法

public void foo(){
  //..    
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在运行时获取methodName(在本例中为foo)?

我知道如何获得classname

this.getClass().的getName()

或者通过Method[] methods = this.getClass().getMethods(); 方法名称获取所有公共方法 一旦参数也很重要,因为可能有多个具有相同名称的方法

java reflection

11
推荐指数
3
解决办法
8993
查看次数

如何在java中获取调用层次结构

我有三个名为的课程FirstClass,SecondClass and ThirdClass.以下是三个类的来源:

FirstClass.java

public class FirstClass {
    public void firstMethod(){
        SecondClass secondClass = new SecondClass();
        secondClass.secondMethod();
    }
    public static void main(String[] args) {
        FirstClass firstClass = new FirstClass();
        firstClass.firstMethod();
    }

}
Run Code Online (Sandbox Code Playgroud)

SecondClass.java

public class SecondClass {
    public void secondMethod(){
        ThirdClass thirdClass = new ThirdClass();
        thirdClass.thirdMethod();
    }

}
Run Code Online (Sandbox Code Playgroud)

ThirdClass.java

public class ThirdClass {
    public void thirdMethod(){
        System.out.println("Here i need to print where the call comes from,(call hierarchy) Is it possible?");
    }
}
Run Code Online (Sandbox Code Playgroud)

在最后的方法(这里是ThirdClass.thirdMethod())我需要打印方法调用来自哪里(我的意思是调用层次结构).所以我需要写在thirdMethod()

java stack-trace call-hierarchy

3
推荐指数
2
解决办法
6192
查看次数