如何使用 Java 跟踪从方法到方法的 Java 流程
How to Trace a Java flow from Method to method using Java
我想在发生异常时跟踪 Java 流程。我是说 Like Consider
Method1 -> Method2 -> Method3 -> Method4 -> Error Came in Method 4 while processing argument1, 假设我们发现它无效。
然后,我们可以有一个如下所示的响应元素:
“DebugInfo”:“方法 1|方法 2|方法 3|方法 4 - 处理参数 1 时方法 4 出现错误。无效,因为目的地不支持 HAL”
这正是使用方法 getStackTrace:
所发生的事情
Provides programmatic access to the stack trace information printed by printStackTrace(). Returns an array of stack trace elements, each representing one stack frame. The zeroth element of the array (assuming the array's length is non-zero) represents the top of the stack, which is the last method invocation in the sequence. Typically, this is the point at which this throwable was created and thrown. The last element of the array (assuming the array's length is non-zero) represents the bottom of the stack, which is the first method invocation in the sequence.
注意顺序和你需要的正好相反(见加粗部分)
所以你可以做类似的事情
StackTraceElement[] elements = exception.getStackTrace();
for (int i = elements.length() - 1; i >= 0; i--) {
System.out.println(elements[i].getMethodName());
}
您只需添加一些模板即可获得您所需要的。
请注意,仅打印(或导出)方法名称是不够的,因为通常您有一个堆栈在不同的 classes 之间移动,因此最好打印 class 名称和方法名称。但是对于更大的方法来说,知道它发生在哪一行也很有用,所以......为什么不使用一个简单的 exception.printStackTrace()
来完全满足你的需要?
我想在发生异常时跟踪 Java 流程。我是说 Like Consider
Method1 -> Method2 -> Method3 -> Method4 -> Error Came in Method 4 while processing argument1, 假设我们发现它无效。
然后,我们可以有一个如下所示的响应元素:
“DebugInfo”:“方法 1|方法 2|方法 3|方法 4 - 处理参数 1 时方法 4 出现错误。无效,因为目的地不支持 HAL”
这正是使用方法 getStackTrace:
所发生的事情Provides programmatic access to the stack trace information printed by printStackTrace(). Returns an array of stack trace elements, each representing one stack frame. The zeroth element of the array (assuming the array's length is non-zero) represents the top of the stack, which is the last method invocation in the sequence. Typically, this is the point at which this throwable was created and thrown. The last element of the array (assuming the array's length is non-zero) represents the bottom of the stack, which is the first method invocation in the sequence.
注意顺序和你需要的正好相反(见加粗部分)
所以你可以做类似的事情
StackTraceElement[] elements = exception.getStackTrace();
for (int i = elements.length() - 1; i >= 0; i--) {
System.out.println(elements[i].getMethodName());
}
您只需添加一些模板即可获得您所需要的。
请注意,仅打印(或导出)方法名称是不够的,因为通常您有一个堆栈在不同的 classes 之间移动,因此最好打印 class 名称和方法名称。但是对于更大的方法来说,知道它发生在哪一行也很有用,所以......为什么不使用一个简单的 exception.printStackTrace()
来完全满足你的需要?