Get the Java callstack anytime
March 24th, 2009 | Java
I’m working on a somewhat complicated Java web application that has evolved over a number of years. As usual, evolution has resulted in the code getting a bit unwieldy. I needed to get the details of the call stack in various places so I could determine (at runtime) where a method was called from. To accomplish that, I developed this class:
package com.purplewasp.util;
import java.util.ArrayList;
public class CallStackUtil {
public synchronized static String getCallStackAsString() {
StringBuilder sb = new StringBuilder();
StackTraceElement[] stackTraceElements =
Thread.currentThread().getStackTrace();
String[] array = getCallStackAsStringArray(stackTraceElements);
for (int i = 0; i < array.length; i++) {
sb.append(array[i] + "\n");
}
return sb.toString();
}
public synchronized static String[] getCallStackAsStringArray() {
StackTraceElement[] stackTraceElements =
Thread.currentThread().getStackTrace();
String[] array = getCallStackAsStringArray(stackTraceElements);
return array;
}
private synchronized static String[] getCallStackAsStringArray(StackTraceElement[] stackTraceElements) {
ArrayList<String> list = new ArrayList<String>();
String[] array = new String[1];
for (int i = 0; i < stackTraceElements.length; i++) {
StackTraceElement element = stackTraceElements[i];
String classname = element.getClassName();
String methodName = element.getMethodName();
int lineNumber = element.getLineNumber();
list.add(classname + "." + methodName + ":" + lineNumber);
}
return list.toArray(array);
}
}
|
0 comments ↓
There are no comments yet...Kick things off by filling out the form below.
You must log in to post a comment.