Java:如何记录调用函数的位置

dat*_*ler 1 java

有没有比肆意抛出异常和捕获堆栈跟踪更好的方法来找出为什么(或至少从哪里)调用我的函数?

我可以记录调用者正在使用的参数,但我无法获得调用者位置本身.它是一些第三方软件,因此查找所有引用并添加日志信息不是一种选择.我也犹豫是否将调试器附加到正在运行的jvm.

小智 8

你可以打电话Thread.currentThread().getStackTrace().

这将为您提供一个StackTrace数组,就像您抛出异常一样.

希望这可以帮助.:)


Hen*_*sen 5

完全可以创建一个异常,而不是抛出它,并检查它的堆栈跟踪:

Exception e = new Exception();
e.printStackTrace(System.out);
Run Code Online (Sandbox Code Playgroud)

请注意,这样做通常可能会对JVM的性能产生不利影响.

StackTraceElement[] stacktrace = e.getStackTrace();
Run Code Online (Sandbox Code Playgroud)

stacktrace数组的第0个元素将包含实例化异常的方法.

  • `对JVM性能的不利影响.好点子.我认为不言而喻,你只会使用它来调试purpouses,因为需要知道调用函数的位置是设计错误还是非常慢(例如,检查堆栈跟踪比调用方法慢几倍).但是,当然,你可以在边缘情况下使用它. (2认同)