public static void dumpStack(PrintStream s, Throwable t, StackTraceFilter filter) { synchronized (s) { s.println(t); StackTraceElement[] trace = t.getStackTrace(); for (int i = 0; i < trace.length; i++) { if (filter.filter(trace[i])) s.println("\tat " + trace[i]); } Throwable ourCause = t.getCause(); if (ourCause != null) printStackTraceAsCause(s, trace, ourCause, filter); } }
public static void dumpStack(PrintStream s, Throwable t, StackTraceFilter filter) { synchronized (s) { s.println(t); StackTraceElement[] trace = t.getStackTrace(); for (int i = 0; i < trace.length; i++) { if (filter.filter(trace[i])) s.println("\tat " + trace[i]); } Throwable ourCause = t.getCause(); if (ourCause != null) printStackTraceAsCause(s, trace, ourCause, filter); } }
/** * Print our stack trace as a cause for the specified stack trace. */ private static void printStackTraceAsCause(PrintStream s, StackTraceElement[] causedTrace, Throwable t, StackTraceFilter filter) { // assert Thread.holdsLock(s); // Compute number of frames in common between this and caused StackTraceElement[] trace = t.getStackTrace(); int m = trace.length - 1, n = causedTrace.length - 1; while (m >= 0 && n >= 0 && trace[m].equals(causedTrace[n])) { m--; n--; } int framesInCommon = trace.length - 1 - m; s.println("Caused by: " + t); for (int i = 0; i <= m; i++) { if (filter.filter(trace[i])) s.println("\tat " + trace[i]); } if (framesInCommon != 0) s.println("\t... " + framesInCommon + " more"); // Recurse if we have a cause Throwable ourCause = t.getCause(); if (ourCause != null) printStackTraceAsCause(s, trace, ourCause, filter); }
/** * Print our stack trace as a cause for the specified stack trace. */ private static void printStackTraceAsCause(PrintStream s, StackTraceElement[] causedTrace, Throwable t, StackTraceFilter filter) { // assert Thread.holdsLock(s); // Compute number of frames in common between this and caused StackTraceElement[] trace = t.getStackTrace(); int m = trace.length - 1, n = causedTrace.length - 1; while (m >= 0 && n >= 0 && trace[m].equals(causedTrace[n])) { m--; n--; } int framesInCommon = trace.length - 1 - m; s.println("Caused by: " + t); for (int i = 0; i <= m; i++) { if (filter.filter(trace[i])) s.println("\tat " + trace[i]); } if (framesInCommon != 0) s.println("\t... " + framesInCommon + " more"); // Recurse if we have a cause Throwable ourCause = t.getCause(); if (ourCause != null) printStackTraceAsCause(s, trace, ourCause, filter); }