private static void dumpThread(Ruby ruby, RubyThread th, Gather gather, PrintWriter pw) { pw.println("Thread: " + th.getNativeThread().getName()); pw.println("Stack:"); ThreadContext tc = th.getContext(); if (tc != null) { RubyException exc = new RubyException(ruby, ruby.getRuntimeError(), "thread dump"); exc.setBacktraceData(gather.getBacktraceData(tc, th.getNativeThread().getStackTrace())); pw.println(Format.MRI.printBacktrace(exc, false)); } else { pw.println(" [no longer alive]"); } pw.println(); }
private static void dumpThread(Ruby ruby, RubyThread th, Gather gather, PrintWriter pw) { pw.println("Thread: " + th.getNativeThread().getName()); pw.println("Stack:"); ThreadContext tc = th.getContext(); if (tc != null) { RubyException exc = new RubyException(ruby, ruby.getRuntimeError(), "thread dump"); exc.setBacktraceData(gather.getBacktraceData(tc, th.getNativeThread().getStackTrace())); pw.println(Format.MRI.printBacktrace(exc, false)); } else { pw.println(" [no longer alive]"); } pw.println(); }
private static void dumpThread(Ruby ruby, RubyThread th, Gather gather, PrintWriter pw) { pw.println("Thread: " + th.getNativeThread().getName()); pw.println("Stack:"); ThreadContext tc = th.getContext(); if (tc != null) { RubyException exc = new RubyException(ruby, ruby.getRuntimeError(), "thread dump"); exc.setBacktraceData(gather.getBacktraceData(tc, th.getNativeThread().getStackTrace(), true)); pw.println(Format.MRI.printBacktrace(exc, false)); } else { pw.println(" [no longer alive]"); } pw.println(); }
private static void dumpThread(Ruby ruby, RubyThread th, Gather gather, PrintWriter pw) { pw.println("Thread: " + th.getNativeThread().getName()); pw.println("Stack:"); ThreadContext tc = th.getContext(); if (tc != null) { RubyException exc = new RubyException(ruby, ruby.getRuntimeError(), "thread dump"); exc.setBacktraceData(gather.getBacktraceData(tc, th.getNativeThread().getStackTrace(), true)); pw.println(Format.MRI.printBacktrace(exc, false)); } else { pw.println(" [no longer alive]"); } pw.println(); }
/** * Gather backtrace data for a normal Ruby trace. * * @param context * @param nativeException * @return */ public BacktraceData getBacktraceData(ThreadContext context, boolean nativeException) { BacktraceData data = getBacktraceData(context, Thread.currentThread().getStackTrace(), nativeException); context.runtime.incrementBacktraceCount(); if (RubyInstanceConfig.LOG_BACKTRACES) logBacktrace(data.getBacktrace(context.runtime)); return data; }
/** * Gather backtrace data for a normal Ruby trace. * * @param context * @param nativeException * @return */ public BacktraceData getBacktraceData(ThreadContext context, boolean nativeException) { BacktraceData data = getBacktraceData(context, Thread.currentThread().getStackTrace(), nativeException); context.runtime.incrementBacktraceCount(); if (RubyInstanceConfig.LOG_BACKTRACES) logBacktrace(data.getBacktrace(context.runtime)); return data; }
private RubyStackTraceElement[] getFullTrace(Integer length, StackTraceElement[] stacktrace) { if (length != null && length == 0) return RubyStackTraceElement.EMPTY_ARRAY; return TraceType.Gather.CALLER.getBacktraceData(this, stacktrace).getBacktrace(runtime); }
/** * Gather backtrace data for a normal Ruby trace. * * @param context * @return */ public BacktraceData getBacktraceData(ThreadContext context) { BacktraceData data = getBacktraceData(context, Thread.currentThread().getStackTrace()); context.runtime.incrementBacktraceCount(); if (RubyInstanceConfig.LOG_BACKTRACES) logBacktrace(context.runtime, data.getBacktrace(context.runtime)); return data; }
public RubyStackTraceElement[] gatherCallerBacktrace() { return Gather.CALLER.getBacktraceData(this).getBacktrace(runtime); }
private RubyStackTraceElement[] getTraceSubset(int level, Integer length, StackTraceElement[] stacktrace) { runtime.incrementCallerCount(); if (length != null && length == 0) return new RubyStackTraceElement[0]; RubyStackTraceElement[] trace = TraceType.Gather.CALLER.getBacktraceData(this, stacktrace, false).getBacktrace(runtime); int traceLength = safeLength(level, length, trace); if (traceLength < 0) return null; trace = Arrays.copyOfRange(trace, level, level + traceLength); if (RubyInstanceConfig.LOG_CALLERS) TraceType.dumpCaller(trace); return trace; }
@Override public void prepareBacktrace(ThreadContext context) { // if it's null, use cause's trace to build a raw stack trace if (backtraceData == null) { backtraceData = TraceType.Gather.RAW.getBacktraceData(getRuntime().getCurrentContext(), cause.getStackTrace()); } }
/** * Get a normal Ruby backtrace, using the current Gather type. * * @param context * @return */ public BacktraceData getBacktrace(ThreadContext context) { return gather.getBacktraceData(context); }
@Override public void prepareBacktrace(ThreadContext context) { // if it's null, use cause's trace to build a raw stack trace if (backtraceData == null) { backtraceData = TraceType.Gather.RAW.getBacktraceData(getRuntime().getCurrentContext(), cause.getStackTrace()); } }
public RubyStackTraceElement[] gatherCallerBacktrace() { Thread nativeThread = thread.getNativeThread(); // Future thread or otherwise unforthgiving thread impl. if (nativeThread == null) return new RubyStackTraceElement[] {}; BacktraceElement[] copy = new BacktraceElement[backtraceIndex + 1]; System.arraycopy(backtrace, 0, copy, 0, backtraceIndex + 1); RubyStackTraceElement[] trace = Gather.CALLER.getBacktraceData(this, false).getBacktrace(runtime); return trace; }
/** * Get a normal Ruby backtrace, using the current Gather type. * * @param context * @param nativeException * @return */ public BacktraceData getBacktrace(ThreadContext context, boolean nativeException) { return gather.getBacktraceData(context, nativeException); }
/** * Get a normal Ruby backtrace, using the current Gather type. * * @param context * @param nativeException * @return */ public BacktraceData getBacktrace(ThreadContext context, boolean nativeException) { return gather.getBacktraceData(context, nativeException); }
private RubyStackTraceElement[] getFullTrace(Integer length, StackTraceElement[] stacktrace) { if (length != null && length == 0) return RubyStackTraceElement.EMPTY_ARRAY; return TraceType.Gather.CALLER.getBacktraceData(this, stacktrace).getBacktrace(runtime); }
private RubyStackTraceElement[] getTraceSubset(int level, Integer length, StackTraceElement[] stacktrace) { runtime.incrementCallerCount(); if (length != null && length == 0) return new RubyStackTraceElement[0]; RubyStackTraceElement[] trace = TraceType.Gather.CALLER.getBacktraceData(this, stacktrace, false).getBacktrace(runtime); int traceLength = safeLength(level, length, trace); if (traceLength < 0) return null; trace = Arrays.copyOfRange(trace, level, level + traceLength); if (RubyInstanceConfig.LOG_CALLERS) TraceType.dumpCaller(trace); return trace; }
/** * Get a normal Ruby backtrace, using the current Gather type. * * @param context * @return */ public BacktraceData getBacktrace(ThreadContext context) { return gather.getBacktraceData(context); }
/** * Gather backtrace data for a normal Ruby trace. * * @param context * @return */ public BacktraceData getBacktraceData(ThreadContext context) { BacktraceData data = getBacktraceData(context, Thread.currentThread().getStackTrace()); context.runtime.incrementBacktraceCount(); if (RubyInstanceConfig.LOG_BACKTRACES) logBacktrace(context.runtime, data.getBacktrace(context.runtime)); return data; }