public RubyStackTraceElement[] getBacktraceElements() { if (backtraceData == null) { return RubyStackTraceElement.EMPTY_ARRAY; } return backtraceData.getBacktrace(getRuntime()); }
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); }
public RubyStackTraceElement[] getBacktraceElements() { if (backtraceData == null) { return RubyStackTraceElement.EMPTY_ARRAY; } return backtraceData.getBacktrace(getRuntime()); }
public RubyStackTraceElement getBacktraceElement(ThreadContext context, int uplevel) { // NOTE: could be optimized not to walk the whole stack RubyStackTraceElement[] elements = getBacktrace(context).getBacktrace(context.runtime); // User can ask for level higher than stack if (elements.length <= uplevel + 1) uplevel = -1; return elements[uplevel + 1]; }
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; }
/** * 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; }
@JRubyMethod(omit = true) public IRubyObject backtrace_locations(ThreadContext context) { if (backtraceLocations != null) return backtraceLocations; if (backtraceData == null) { backtraceLocations = context.nil; } else { Ruby runtime = context.runtime; backtraceLocations = RubyThread.Location.newLocationArray(runtime, backtraceData.getBacktrace(runtime)); } return backtraceLocations; }
@JRubyMethod(omit = true) public IRubyObject backtrace_locations(ThreadContext context) { if (backtraceLocations != null) return backtraceLocations; if (backtraceData == null) { backtraceLocations = context.nil; } else { Ruby runtime = context.runtime; backtraceLocations = RubyThread.Location.newLocationArray(runtime, backtraceData.getBacktrace(runtime)); } return backtraceLocations; }
@JRubyMethod(compat = CompatVersion.RUBY2_0, omit = true) public IRubyObject backtrace_locations(ThreadContext context) { Ruby runtime = context.runtime; RubyStackTraceElement[] elements = backtraceData.getBacktrace(runtime); return RubyThread.Location.newLocationArray(runtime, elements); }
/** * 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; }
@Deprecated // un-used public static void rewriteStackTrace(final Ruby runtime, final Throwable e) { final StackTraceElement[] javaTrace = e.getStackTrace(); BacktraceData backtraceData = runtime.getInstanceConfig().getTraceType().getIntegratedBacktrace(runtime.getCurrentContext(), javaTrace); e.setStackTrace(RaiseException.javaTraceFromRubyTrace(backtraceData.getBacktrace(runtime))); }
@Deprecated // un-used public static void rewriteStackTrace(final Ruby runtime, final Throwable e) { final StackTraceElement[] javaTrace = e.getStackTrace(); BacktraceData backtraceData = runtime.getInstanceConfig().getTraceType().getIntegratedBacktrace(runtime.getCurrentContext(), javaTrace); e.setStackTrace(RaiseException.javaTraceFromRubyTrace(backtraceData.getBacktrace(runtime))); }
public static IRubyObject rewriteStackTraceAndThrow(ThreadContext context, Throwable t) { Ruby runtime = context.runtime; StackTraceElement[] javaTrace = t.getStackTrace(); BacktraceData backtraceData = runtime.getInstanceConfig().getTraceType().getIntegratedBacktrace(context, javaTrace); t.setStackTrace(RaiseException.javaTraceFromRubyTrace(backtraceData.getBacktrace(runtime))); throwException(t); return null; // not reached }
public static IRubyObject rewriteStackTraceAndThrow(ThreadContext context, Throwable t) { Ruby runtime = context.runtime; StackTraceElement[] javaTrace = t.getStackTrace(); BacktraceData backtraceData = runtime.getInstanceConfig().getTraceType().getIntegratedBacktrace(context, javaTrace); t.setStackTrace(RaiseException.javaTraceFromRubyTrace(backtraceData.getBacktrace(runtime))); throwException(t); return null; // not reached }
public void initBacktrace() { Ruby runtime = getRuntime(); if (backtraceData == null) { backtrace = runtime.getNil(); } else { backtrace = TraceType.generateMRIBacktrace(runtime, backtraceData.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; }
public void initBacktrace() { Ruby runtime = getRuntime(); if (backtraceData == null) { backtrace = runtime.getNil(); } else { backtrace = TraceType.generateMRIBacktrace(runtime, backtraceData.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; }
/** * Render the current backtrace as a string to the given StringBuilder. This will honor the currently-configured * backtrace format and content. * * @param sb the StringBuilder to which to render the backtrace */ public void renderCurrentBacktrace(StringBuilder sb) { TraceType traceType = runtime.getInstanceConfig().getTraceType(); BacktraceData backtraceData = traceType.getBacktrace(this); traceType.getFormat().renderBacktrace(backtraceData.getBacktrace(runtime), sb, false); }
/** * Render the current backtrace as a string to the given StringBuilder. This will honor the currently-configured * backtrace format and content. * * @param sb the StringBuilder to which to render the backtrace */ public void renderCurrentBacktrace(StringBuilder sb) { TraceType traceType = runtime.getInstanceConfig().getTraceType(); BacktraceData backtraceData = traceType.getBacktrace(this); traceType.getFormat().renderBacktrace(backtraceData.getBacktrace(runtime), sb, false); }