Mercurial > hg > truffle
changeset 22442:2b1845933b6f
Truffle/REPL: fix two minor bugs and improve error reporting
author | Michael Van De Vanter <michael.van.de.vanter@oracle.com> |
---|---|
date | Tue, 20 Oct 2015 11:29:46 -0400 |
parents | 518f8ead5d01 |
children | 2e5ac2d13d84 |
files | truffle/com.oracle.truffle.sl.tools/src/com/oracle/truffle/sl/tools/debug/SLREPLHandler.java truffle/com.oracle.truffle.tools.debug.shell/src/com/oracle/truffle/tools/debug/shell/server/REPLHandler.java |
diffstat | 2 files changed, 36 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.sl.tools/src/com/oracle/truffle/sl/tools/debug/SLREPLHandler.java Sun Oct 18 19:42:47 2015 +0200 +++ b/truffle/com.oracle.truffle.sl.tools/src/com/oracle/truffle/sl/tools/debug/SLREPLHandler.java Tue Oct 20 11:29:46 2015 -0400 @@ -142,7 +142,7 @@ } catch (KillException ex) { return finishReplySucceeded(reply, fileName + " killed"); } catch (Exception ex) { - return finishReplyFailed(reply, "error loading file \"" + fileName + "\": " + ex.getMessage()); + return finishReplyFailed(reply, ex); } } }
--- a/truffle/com.oracle.truffle.tools.debug.shell/src/com/oracle/truffle/tools/debug/shell/server/REPLHandler.java Sun Oct 18 19:42:47 2015 +0200 +++ b/truffle/com.oracle.truffle.tools.debug.shell/src/com/oracle/truffle/tools/debug/shell/server/REPLHandler.java Tue Oct 20 11:29:46 2015 -0400 @@ -25,6 +25,7 @@ package com.oracle.truffle.tools.debug.shell.server; import com.oracle.truffle.api.debug.Breakpoint; +import com.oracle.truffle.api.debug.Debugger; import com.oracle.truffle.api.frame.Frame; import com.oracle.truffle.api.frame.FrameDescriptor; import com.oracle.truffle.api.frame.FrameInstance; @@ -38,6 +39,7 @@ import com.oracle.truffle.api.source.Source; import com.oracle.truffle.api.source.SourceSection; import com.oracle.truffle.tools.debug.shell.REPLMessage; + import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -104,9 +106,18 @@ return replies; } + protected static final REPLMessage[] finishReplyFailed(REPLMessage reply, Exception ex) { + reply.put(REPLMessage.STATUS, REPLMessage.FAILED); + String message = ex.getMessage(); + reply.put(REPLMessage.DISPLAY_MSG, message == null ? ex.getClass().getSimpleName() : message); + final REPLMessage[] replies = new REPLMessage[]{reply}; + return replies; + } + static final REPLMessage createBreakpointInfoMessage(Breakpoint breakpoint, REPLServerContext serverContext) { final REPLMessage infoMessage = new REPLMessage(REPLMessage.OP, REPLMessage.BREAKPOINT_INFO); infoMessage.put(REPLMessage.BREAKPOINT_ID, Integer.toString(serverContext.getBreakpointID(breakpoint))); + infoMessage.put(REPLMessage.BREAKPOINT_STATE, breakpoint.getState().getName()); infoMessage.put(REPLMessage.BREAKPOINT_HIT_COUNT, Integer.toString(breakpoint.getHitCount())); infoMessage.put(REPLMessage.BREAKPOINT_IGNORE_COUNT, Integer.toString(breakpoint.getIgnoreCount())); infoMessage.put(REPLMessage.INFO_VALUE, breakpoint.getLocationDescription().toString()); @@ -169,7 +180,7 @@ try { source = Source.fromFileName(lookupFile, true); } catch (Exception ex) { - return finishReplyFailed(reply, ex.getMessage()); + return finishReplyFailed(reply, ex); } if (source == null) { return finishReplyFailed(reply, fileName + " not found"); @@ -182,12 +193,16 @@ if (ignoreCount == null) { ignoreCount = 0; } + final Debugger db = serverContext.db(); + if (db == null) { + return finishReplyFailed(reply, "debugger not initialized"); + } Breakpoint breakpoint; try { - breakpoint = serverContext.db().setLineBreakpoint(DEFAULT_IGNORE_COUNT, source.createLineLocation(lineNumber), false); + breakpoint = db.setLineBreakpoint(DEFAULT_IGNORE_COUNT, source.createLineLocation(lineNumber), false); serverContext.registerBreakpoint(breakpoint); } catch (Exception ex) { - return finishReplyFailed(reply, ex.getMessage()); + return finishReplyFailed(reply, ex); } reply.put(REPLMessage.SOURCE_NAME, fileName); reply.put(REPLMessage.FILE_PATH, source.getPath()); @@ -210,7 +225,7 @@ try { source = Source.fromFileName(lookupFile, true); } catch (Exception ex) { - return finishReplyFailed(reply, ex.getMessage()); + return finishReplyFailed(reply, ex); } if (source == null) { return finishReplyFailed(reply, fileName + " not found"); @@ -223,7 +238,7 @@ Breakpoint b = serverContext.db().setLineBreakpoint(DEFAULT_IGNORE_COUNT, source.createLineLocation(lineNumber), true); serverContext.registerBreakpoint(b); } catch (Exception ex) { - return finishReplyFailed(reply, ex.getMessage()); + return finishReplyFailed(reply, ex); } reply.put(REPLMessage.SOURCE_NAME, fileName); reply.put(REPLMessage.FILE_PATH, source.getPath()); @@ -242,7 +257,7 @@ serverContext.registerBreakpoint(b); return finishReplySucceeded(reply, "Breakpoint at any throw set"); } catch (Exception ex) { - return finishReplyFailed(reply, ex.getMessage()); + return finishReplyFailed(reply, ex); } } }; @@ -256,7 +271,7 @@ serverContext.db().setTagBreakpoint(DEFAULT_IGNORE_COUNT, StandardSyntaxTag.THROW, true); return finishReplySucceeded(reply, "One-shot breakpoint at any throw set"); } catch (Exception ex) { - return finishReplyFailed(reply, ex.getMessage()); + return finishReplyFailed(reply, ex); } } }; @@ -369,20 +384,20 @@ if (fileName == null) { return finishReplyFailed(reply, "no file specified"); } + reply.put(REPLMessage.SOURCE_NAME, fileName); try { Source source = Source.fromFileName(fileName); if (source == null) { - reply.put(REPLMessage.SOURCE_NAME, fileName); - return finishReplyFailed(reply, " not found"); + return finishReplyFailed(reply, "file \"" + fileName + "\" not found"); } else { - reply.put(REPLMessage.SOURCE_NAME, fileName); reply.put(REPLMessage.FILE_PATH, source.getPath()); reply.put(REPLMessage.CODE, source.getCode()); return finishReplySucceeded(reply, "file found"); } + } catch (IOException ex) { + return finishReplyFailed(reply, "can't read file \"" + fileName + "\""); } catch (Exception ex) { - reply.put(REPLMessage.SOURCE_NAME, fileName); - return finishReplyFailed(reply, "file \"" + fileName + "\" not found"); + return finishReplyFailed(reply, ex); } } }; @@ -424,7 +439,7 @@ } return finishReplySucceeded(frameMessage, sb.toString()); } catch (Exception ex) { - return finishReplyFailed(frameMessage, ex.toString()); + return finishReplyFailed(frameMessage, ex); } } }; @@ -471,6 +486,8 @@ return finishReplyFailed(message, "invalid condition for " + breakpointNumber); } catch (UnsupportedOperationException ex) { return finishReplyFailed(message, "conditions not unsupported by breakpoint " + breakpointNumber); + } catch (Exception ex) { + return finishReplyFailed(message, ex); } message.put(REPLMessage.BREAKPOINT_CONDITION, expr); return finishReplySucceeded(message, "Breakpoint " + breakpointNumber + " condition=\"" + expr + "\""); @@ -547,7 +564,7 @@ } } catch (Exception ex) { - return finishReplyFailed(reply, ex.toString()); + return finishReplyFailed(reply, ex); } } }; @@ -568,10 +585,10 @@ } try { breakpoint.setCondition(null); - } catch (IOException e) { - return finishReplyFailed(message, e.getMessage()); + } catch (Exception ex) { + return finishReplyFailed(message, ex); } - return finishReplyFailed(message, "Breakpoint " + breakpointNumber + " condition cleared"); + return finishReplySucceeded(message, "Breakpoint " + breakpointNumber + " condition cleared"); } }; @@ -599,7 +616,7 @@ } return finishReplySucceeded(reply, sb.toString()); } catch (Exception ex) { - return finishReplyFailed(reply, ex.toString()); + return finishReplyFailed(reply, ex); } } };