public static void printSite(Site s, StringBuilder out) { if (s == null) { out.append("(null)"); return; } StackTraceElement[] st = s.site(); int interestingSitesPrinted = 0; for (int i = s.offset; i < st.length; i++) { StackTraceElement e = st[i]; String fileName = e.getFileName(); if (THIS_FILE_NAME.equals(fileName)) { continue; } out.append(" " + e.getMethodName() + "(" + e.getFileName() + ":" + e.getLineNumber() + ")"); interestingSitesPrinted++; if (interestingSitesPrinted <= SITES_TO_PRINT) { continue; } if (fileName == null || "View.java".equals(fileName)) { continue; } String methodName = e.getMethodName(); if (skipMethods.contains(methodName)) { continue; } break; } }
/** Checks all of the methods in gen for consistency */ public static void checkMgens(final ClassGen gen) { if (skip_checks) return; Method[] methods = gen.getMethods(); for (int i = 0; i < methods.length; i++) { Method method = methods[i]; // System.out.println ("Checking method " + method + " in class " // + gen.getClassName()); checkMgen(new MethodGen(method, gen.getClassName(), gen.getConstantPool())); } if (false) { Throwable t = new Throwable(); t.fillInStackTrace(); StackTraceElement[] ste = t.getStackTrace(); StackTraceElement caller = ste[1]; System.out.printf( "%s.%s (%s line %d)", caller.getClassName(), caller.getMethodName(), caller.getFileName(), caller.getLineNumber()); for (int ii = 2; ii < ste.length; ii++) System.out.printf(" [%s line %d]", ste[ii].getFileName(), ste[ii].getLineNumber()); System.out.printf("\n"); dump_methods(gen); } }
/** * This method duplicates the functionality of ExceptionUtils.describeStackLevels which is no * longer supported in Rice. * * @param fromLevel * @param toLevel * @return */ public static String getMethodPath(int fromLevel, int toLevel) { StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace(); // increase the levels to avoid including the method that called this. fromLevel = fromLevel + 1; toLevel = toLevel + 1; if (fromLevel <= 0) { throw new IllegalArgumentException("invalid fromLevel (" + fromLevel + " < 0)"); } if (fromLevel > toLevel) { throw new IllegalArgumentException( "invalid levels (fromLevel " + fromLevel + " > toLevel " + toLevel + ")"); } if (toLevel >= stackTraceElements.length) { throw new IllegalArgumentException( "invalid toLevel (" + toLevel + " >= " + stackTraceElements.length + ")"); } StringBuffer result = new StringBuffer(); int elementIndex = 0; for (StackTraceElement element : stackTraceElements) { if (elementIndex >= fromLevel && elementIndex >= toLevel) { if (result.length() > 0) { result.append(" from "); } result.append(element.getClassName()).append("."); result.append(element.getMethodName()).append("("); result.append(element.getFileName()).append(":"); result.append(element.getLineNumber()).append(")"); } elementIndex++; } return result.toString(); }
// Private method to infer the caller's class and method names private void inferCaller() { needToInferCaller = false; // Android-changed: Use VMStack.getThreadStackTrace. StackTraceElement[] stack = VMStack.getThreadStackTrace(Thread.currentThread()); int depth = stack.length; boolean lookingForLogger = true; for (int ix = 0; ix < depth; ix++) { // Calling getStackTraceElement directly prevents the VM // from paying the cost of building the entire stack frame. // // Android-changed: Use value from getThreadStackTrace. StackTraceElement frame = stack[ix]; String cname = frame.getClassName(); boolean isLoggerImpl = isLoggerImplFrame(cname); if (lookingForLogger) { // Skip all frames until we have found the first logger frame. if (isLoggerImpl) { lookingForLogger = false; } } else { if (!isLoggerImpl) { // skip reflection call if (!cname.startsWith("java.lang.reflect.") && !cname.startsWith("sun.reflect.")) { // We've found the relevant frame. setSourceClassName(cname); setSourceMethodName(frame.getMethodName()); return; } } } } // We haven't found a suitable frame, so just punt. This is // OK as we are only committed to making a "best effort" here. }
/** * Prints out the given debug message to System.out, prefixed by the calling class name, method * and line number, appending the stacktrace of the given exception. */ public static void out(final String _debug_msg, final Throwable _exception) { String header = "DEBUG::"; header = header + new Date(SystemTime.getCurrentTime()).toString() + "::"; String className; String methodName; int lineNumber; String trace_trace_tail = null; try { throw new Exception(); } catch (Exception e) { StackTraceElement[] st = e.getStackTrace(); StackTraceElement first_line = st[2]; className = first_line.getClassName() + "::"; methodName = first_line.getMethodName() + "::"; lineNumber = first_line.getLineNumber(); trace_trace_tail = getCompressedStackTrace(e, 3, 200, false); } diagLoggerLogAndOut(header + className + (methodName) + lineNumber + ":", true); if (_debug_msg.length() > 0) { diagLoggerLogAndOut(" " + _debug_msg, true); } if (trace_trace_tail != null) { diagLoggerLogAndOut(" " + trace_trace_tail, true); } if (_exception != null) { diagLoggerLogAndOut(_exception); } }
public static void printElement(Site s, int index) { if (s == null || index >= s.site().length) { ps.print("(null)"); } else { StackTraceElement e = s.site()[index]; ps.print(e.getMethodName() + " (" + e.getFileName() + ":" + e.getLineNumber() + ")"); } }
private void appendTestMethod(@Nonnull StackTraceElement current) { content.append(" <li>"); content.append(current.getClassName()).append('#'); content .append(LESS_THAN_CHAR.matcher(current.getMethodName()).replaceFirst("<")) .append(": "); content.append(current.getLineNumber()); }
private static void printElementInfo(OutputStream stream, StackTraceElement element) { print(stream, element.getClassName()); print(stream, ":"); print(stream, element.getMethodName()); print(stream, " "); print(stream, "("); print(stream, element.getFileName()); print(stream, ":"); print(stream, element.getLineNumber()); print(stream, ")"); printNewLine(stream); }
public static void printStackTrace(Throwable e, Object context) { String header = "DEBUG::"; header = header + new Date(SystemTime.getCurrentTime()).toString() + "::"; String className = "?::"; String methodName = "?::"; int lineNumber = -1; try { throw new Exception(); } catch (Exception f) { StackTraceElement[] st = f.getStackTrace(); for (int i = 1; i < st.length; i++) { StackTraceElement first_line = st[i]; className = first_line.getClassName() + "::"; methodName = first_line.getMethodName() + "::"; lineNumber = first_line.getLineNumber(); // skip stuff generated by the logger if (className.indexOf(".logging.") != -1 || className.endsWith(".Debug::")) { continue; } break; } } diagLoggerLogAndOut(header + className + (methodName) + lineNumber + ":", true); try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); PrintWriter pw = new PrintWriter(new OutputStreamWriter(baos)); if (context != null) { pw.print(" "); pw.println(context); } pw.print(" "); e.printStackTrace(pw); pw.close(); String stack = baos.toString(); diagLoggerLogAndOut(stack, true); } catch (Throwable ignore) { e.printStackTrace(); } }
public static void printElements(Site s, int index, int nelems) { if (s == null || index >= s.site().length) { ps.print("(null)"); } else { for (int i = 0; i < nelems; i++) { int j = index + i; if (j >= s.site().length) { break; } if (i > 0) { ps.print(", "); } StackTraceElement e = s.site()[j]; ps.print(e.getMethodName() + " (" + e.getFileName() + ":" + e.getLineNumber() + ")"); } } }
protected static boolean wasCalledDuringClassLoading() { if (LOCK.isHeldByCurrentThread()) return true; LOCK.lock(); try { StackTrace st = new StackTrace(new Throwable()); int n = st.getDepth(); for (int i = 3; i < n; i++) { StackTraceElement ste = st.getElement(i); if ("ClassLoader.java".equals(ste.getFileName()) && "loadClass".equals(ste.getMethodName())) { return true; } } return false; } finally { LOCK.unlock(); } }
private static boolean isIdleThread(ThreadInfo threadInfo) { String threadName = threadInfo.getThreadName(); // NOTE: these are likely JVM dependent if (threadName.equals("Signal Dispatcher") || threadName.equals("Finalizer") || threadName.equals("Reference Handler")) { return true; } for (StackTraceElement frame : threadInfo.getStackTrace()) { String className = frame.getClassName(); String methodName = frame.getMethodName(); if (className.equals("java.util.concurrent.ThreadPoolExecutor") && methodName.equals("getTask")) { return true; } if (className.equals("sun.nio.ch.SelectorImpl") && methodName.equals("select")) { return true; } if (className.equals("org.elasticsearch.threadpool.ThreadPool$EstimatedTimeThread") && methodName.equals("run")) { return true; } if (className.equals("org.elasticsearch.indices.ttl.IndicesTTLService$Notifier") && methodName.equals("await")) { return true; } if (className.equals("java.util.concurrent.LinkedTransferQueue") && methodName.equals("poll")) { return true; } } return false; }
/** * Format the given message to XML. * * @param record the log record to be formatted. * @return a formatted log record */ public String format(LogRecord record0) { if (!(record0 instanceof TopLinkLogRecord)) { return super.format(record0); } else { TopLinkLogRecord record = (TopLinkLogRecord) record0; StringBuffer sb = new StringBuffer(500); sb.append("<record>\n"); if (record.shouldPrintDate()) { sb.append(" <date>"); appendISO8601(sb, record.getMillis()); sb.append("</date>\n"); sb.append(" <millis>"); sb.append(record.getMillis()); sb.append("</millis>\n"); } sb.append(" <sequence>"); sb.append(record.getSequenceNumber()); sb.append("</sequence>\n"); String name = record.getLoggerName(); if (name != null) { sb.append(" <logger>"); escape(sb, name); sb.append("</logger>\n"); } sb.append(" <level>"); escape(sb, record.getLevel().toString()); sb.append("</level>\n"); if (record.getSourceClassName() != null) { sb.append(" <class>"); escape(sb, record.getSourceClassName()); sb.append("</class>\n"); } if (record.getSourceMethodName() != null) { sb.append(" <method>"); escape(sb, record.getSourceMethodName()); sb.append("</method>\n"); } if (record.getSessionString() != null) { sb.append(" <session>"); sb.append(record.getSessionString()); sb.append("</session>\n"); } if (record.getConnection() != null) { sb.append(" <connection>"); sb.append(String.valueOf(System.identityHashCode(record.getConnection()))); sb.append("</connection>\n"); } if (record.shouldPrintThread()) { sb.append(" <thread>"); sb.append(record.getThreadID()); sb.append("</thread>\n"); } if (record.getMessage() != null) { // Format the message string and its accompanying parameters. String message = formatMessage(record); sb.append(" <message>"); escape(sb, message); sb.append("</message>"); sb.append("\n"); } // If the message is being localized, output the key, resource // bundle name, and params. ResourceBundle bundle = record.getResourceBundle(); try { if ((bundle != null) && (bundle.getString(record.getMessage()) != null)) { sb.append(" <key>"); escape(sb, record.getMessage()); sb.append("</key>\n"); sb.append(" <catalog>"); escape(sb, record.getResourceBundleName()); sb.append("</catalog>\n"); Object[] parameters = record.getParameters(); for (int i = 0; i < parameters.length; i++) { sb.append(" <param>"); try { escape(sb, parameters[i].toString()); } catch (Exception ex) { sb.append("???"); } sb.append("</param>\n"); } } } catch (Exception ex) { // The message is not in the catalog. Drop through. } if (record.getThrown() != null) { // Report on the state of the throwable. Throwable th = record.getThrown(); sb.append(" <exception>\n"); sb.append(" <message>"); escape(sb, th.toString()); sb.append("</message>\n"); if ((record.getLevel().intValue() == Level.SEVERE.intValue()) || ((record.getLevel().intValue() <= Level.WARNING.intValue()) && record.shouldLogExceptionStackTrace())) { StackTraceElement[] trace = th.getStackTrace(); for (int i = 0; i < trace.length; i++) { StackTraceElement frame = trace[i]; sb.append(" <frame>\n"); sb.append(" <class>"); escape(sb, frame.getClassName()); sb.append("</class>\n"); sb.append(" <method>"); escape(sb, frame.getMethodName()); sb.append("</method>\n"); // Check for a line number. if (frame.getLineNumber() >= 0) { sb.append(" <line>"); sb.append(frame.getLineNumber()); sb.append("</line>\n"); } sb.append(" </frame>\n"); } } sb.append(" </exception>\n"); } sb.append("</record>\n"); return sb.toString(); } }