public static TraceType traceTypeFor(String style) { if (style.equalsIgnoreCase("raw")) return new TraceType(Gather.RAW, Format.JRUBY); else if (style.equalsIgnoreCase("ruby_framed")) return new TraceType(Gather.NORMAL, Format.JRUBY); else if (style.equalsIgnoreCase("normal")) return new TraceType(Gather.NORMAL, Format.JRUBY); else if (style.equalsIgnoreCase("full")) return new TraceType(Gather.FULL, Format.JRUBY); else if (style.equalsIgnoreCase("mri")) return new TraceType(Gather.NORMAL, Format.MRI); else return new TraceType(Gather.NORMAL, Format.JRUBY); }
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 String printBacktrace(RubyException exception, boolean console) { return printBacktraceJRuby(exception, console); } };
@Override public void run() { try { result[0] = ruby.get().evalScriptlet(code).toString(); } catch (RaiseException re) { result[0] = ruby.get().getInstanceConfig().getTraceType().printBacktrace(re.getException(), false); } catch (Throwable t) { StringWriter sw = new StringWriter(); t.printStackTrace(new PrintWriter(sw)); result[0] = sw.toString(); } } };
/** * 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; }
/** * Prepare an "integrated" backtrace that includes the normal Ruby trace plus non-filtered Java frames. Used by * Java integration to show the Java frames for a JI-called method. * * @param context * @param javaTrace */ public void prepareIntegratedBacktrace(ThreadContext context, StackTraceElement[] javaTrace) { // if it's null, build a backtrace if (backtraceData == null) { backtraceData = context.runtime.getInstanceConfig().getTraceType().getIntegratedBacktrace(context, javaTrace); } }
/** * 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); }
public void initBacktrace() { Ruby runtime = getRuntime(); if (backtraceData == null) { backtrace = runtime.getNil(); } else { backtrace = TraceType.generateMRIBacktrace(runtime, backtraceData.getBacktrace(runtime)); } }
public String printBacktrace(RubyException exception, boolean console) { return printBacktraceMRI(exception, console); }
printErrorPos(context, errorStream); } else { IRubyObject mesg = ((RubyArray) backtrace).first(); printErrorPos(context, errorStream); } else { errorStream.print(mesg);
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 run() { try { result[0] = ruby.get().evalScriptlet(code).toString(); } catch (RaiseException re) { result[0] = ruby.get().getInstanceConfig().getTraceType().printBacktrace(re.getException(), false); } catch (Throwable t) { StringWriter sw = new StringWriter(); t.printStackTrace(new PrintWriter(sw)); result[0] = sw.toString(); } } };
/** * 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; }
/** * Prepare an "integrated" backtrace that includes the normal Ruby trace plus non-filtered Java frames. Used by * Java integration to show the Java frames for a JI-called method. * * @param context * @param javaTrace */ public void prepareIntegratedBacktrace(ThreadContext context, StackTraceElement[] javaTrace) { // if it's null, build a backtrace if (backtraceData == null) { backtraceData = context.runtime.getInstanceConfig().getTraceType().getIntegratedBacktrace(context, javaTrace); } }
/** * 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); }
public void initBacktrace() { Ruby runtime = getRuntime(); if (backtraceData == null) { backtrace = runtime.getNil(); } else { backtrace = TraceType.generateMRIBacktrace(runtime, backtraceData.getBacktrace(runtime)); } }
public String printBacktrace(RubyException exception, boolean console) { return printBacktraceMRI(exception, console); } },
printErrorPos(context, errorStream); } else { IRubyObject mesg = ((RubyArray) backtrace).first(); printErrorPos(context, errorStream); } else { errorStream.print(mesg);
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 run() { // IRubyObject oldExc = ruby.get().getGlobalVariables().get("$!"); // Save $! try { result[0] = ruby.get().evalScriptlet(code).toString(); } catch (RaiseException re) { result[0] = ruby.get().getInstanceConfig().getTraceType().printBacktrace(re.getException(), false); // ruby.get().getGlobalVariables().set("$!", oldExc); // Restore $! } catch (Throwable t) { StringWriter sw = new StringWriter(); t.printStackTrace(new PrintWriter(sw)); result[0] = sw.toString(); } } };