Search in sources :

Example 1 with CommandProcessException

use of com.oracle.truffle.tools.chromeinspector.server.CommandProcessException in project graal by oracle.

the class TruffleDebugger method getPossibleBreakpoints.

@Override
public Params getPossibleBreakpoints(Location start, Location end, boolean restrictToFunction) throws CommandProcessException {
    int scriptId = start.getScriptId();
    if (scriptId != end.getScriptId()) {
        throw new CommandProcessException("Different location scripts: " + scriptId + ", " + end.getScriptId());
    }
    Script script = slh.getScript(scriptId);
    if (script == null) {
        throw new CommandProcessException("Unknown scriptId: " + scriptId);
    }
    Source source = script.getSource();
    int o1 = source.getLineStartOffset(start.getLine());
    if (start.getColumn() > 0) {
        o1 += start.getColumn() - 1;
    }
    int o2;
    if (end.getLine() > source.getLineCount()) {
        o2 = source.getLength();
    } else {
        o2 = source.getLineStartOffset(end.getLine());
        if (end.getColumn() > 0) {
            o2 += end.getColumn() - 1;
        }
    }
    SourceSection range = source.createSection(o1, o2 - o1);
    Iterable<SourceSection> locations = SuspendableLocationFinder.findSuspendableLocations(range, restrictToFunction, context.getEnv());
    JSONObject json = new JSONObject();
    JSONArray arr = new JSONArray();
    for (SourceSection ss : locations) {
        arr.put(new Location(scriptId, ss.getStartLine(), ss.getStartColumn()).toJSON());
    }
    json.put("locations", arr);
    return new Params(json);
}
Also used : CommandProcessException(com.oracle.truffle.tools.chromeinspector.server.CommandProcessException) Script(com.oracle.truffle.tools.chromeinspector.types.Script) JSONObject(org.json.JSONObject) JSONArray(org.json.JSONArray) Params(com.oracle.truffle.tools.chromeinspector.commands.Params) SourceSection(com.oracle.truffle.api.source.SourceSection) Breakpoint(com.oracle.truffle.api.debug.Breakpoint) Source(com.oracle.truffle.api.source.Source) Location(com.oracle.truffle.tools.chromeinspector.types.Location)

Example 2 with CommandProcessException

use of com.oracle.truffle.tools.chromeinspector.server.CommandProcessException in project graal by oracle.

the class TruffleExecutionContext method executeInSuspendThread.

<T> T executeInSuspendThread(SuspendThreadExecutable<T> executable) throws NoSuspendedThreadException, GuestLanguageException, CommandProcessException {
    CompletableFuture<T> cf = new CompletableFuture<>();
    suspendThreadExecutor.execute(new CancellableRunnable() {

        @Override
        public void run() {
            T params = null;
            try {
                params = executable.executeCommand();
                cf.complete(params);
            } catch (ThreadDeath td) {
                cf.completeExceptionally(td);
                throw td;
            } catch (Throwable t) {
                cf.completeExceptionally(t);
            }
        }

        @Override
        public void cancel() {
            cf.completeExceptionally(new NoSuspendedThreadException("Resuming..."));
        }
    });
    T params;
    try {
        params = cf.get();
    } catch (ExecutionException ex) {
        Throwable cause = ex.getCause();
        if (cause instanceof TruffleException && !((TruffleException) cause).isInternalError()) {
            throw new GuestLanguageException((TruffleException) cause);
        }
        if (cause instanceof CommandProcessException) {
            throw (CommandProcessException) cause;
        }
        if (cause instanceof NoSuspendedThreadException) {
            throw (NoSuspendedThreadException) cause;
        }
        if (err != null) {
            cause.printStackTrace(err);
        }
        throw new CommandProcessException(ex.getLocalizedMessage());
    } catch (InterruptedException ex) {
        throw new CommandProcessException(ex.getLocalizedMessage());
    }
    return params;
}
Also used : CommandProcessException(com.oracle.truffle.tools.chromeinspector.server.CommandProcessException) CompletableFuture(java.util.concurrent.CompletableFuture) ExecutionException(java.util.concurrent.ExecutionException) TruffleException(com.oracle.truffle.api.TruffleException)

Example 3 with CommandProcessException

use of com.oracle.truffle.tools.chromeinspector.server.CommandProcessException in project graal by oracle.

the class TruffleRuntime method evaluate.

@Override
public Params evaluate(String expression, String objectGroup, boolean includeCommandLineAPI, boolean silent, int contextId, boolean returnByValue, boolean awaitPromise) throws CommandProcessException {
    if (expression == null) {
        throw new CommandProcessException("An expression required.");
    }
    JSONObject json = new JSONObject();
    DebuggerSuspendedInfo suspendedInfo = context.getSuspendedInfo();
    if (suspendedInfo != null) {
        try {
            context.executeInSuspendThread(new SuspendThreadExecutable<Void>() {

                @Override
                public Void executeCommand() throws CommandProcessException {
                    JSONObject result;
                    DebugValue value = suspendedInfo.getSuspendedEvent().getTopStackFrame().eval(expression);
                    if (returnByValue) {
                        result = RemoteObject.createJSONResultValue(value, context.getErr());
                    } else {
                        RemoteObject ro = new RemoteObject(value, context.getErr());
                        context.getRemoteObjectsHandler().register(ro);
                        result = ro.toJSON();
                    }
                    json.put("result", result);
                    return null;
                }
            });
        } catch (NoSuspendedThreadException ex) {
            JSONObject exceptionDetails = new JSONObject();
            exceptionDetails.put("text", ex.getLocalizedMessage());
            json.put("exceptionDetails", exceptionDetails);
        } catch (GuestLanguageException ex) {
            fillExceptionDetails(json, ex);
        }
    } else {
        JSONObject exceptionDetails = new JSONObject();
        exceptionDetails.put("text", "<Not suspended>");
        json.put("exceptionDetails", exceptionDetails);
    }
    return new Params(json);
}
Also used : CommandProcessException(com.oracle.truffle.tools.chromeinspector.server.CommandProcessException) RemoteObject(com.oracle.truffle.tools.chromeinspector.types.RemoteObject) JSONObject(org.json.JSONObject) DebugValue(com.oracle.truffle.api.debug.DebugValue) Params(com.oracle.truffle.tools.chromeinspector.commands.Params) NoSuspendedThreadException(com.oracle.truffle.tools.chromeinspector.TruffleExecutionContext.NoSuspendedThreadException) GuestLanguageException(com.oracle.truffle.tools.chromeinspector.TruffleExecutionContext.GuestLanguageException)

Example 4 with CommandProcessException

use of com.oracle.truffle.tools.chromeinspector.server.CommandProcessException in project graal by oracle.

the class TruffleRuntime method getProperties.

@Override
public Params getProperties(String objectId, boolean ownProperties) throws CommandProcessException {
    if (objectId == null) {
        throw new CommandProcessException("An objectId required.");
    }
    RemoteObject object = context.getRemoteObjectsHandler().getRemote(objectId);
    JSONObject json = new JSONObject();
    if (object != null) {
        DebugValue value = object.getDebugValue();
        try {
            if (value != null) {
                context.executeInSuspendThread(new SuspendThreadExecutable<Void>() {

                    @Override
                    public Void executeCommand() throws CommandProcessException {
                        putResultProperties(json, value.getProperties(), value.isArray() ? value.getArray() : Collections.emptyList());
                        return null;
                    }
                });
            } else {
                final DebugScope scope = object.getScope();
                context.executeInSuspendThread(new SuspendThreadExecutable<Void>() {

                    @Override
                    public Void executeCommand() throws CommandProcessException {
                        Collection<DebugValue> properties = new ArrayList<>();
                        for (DebugValue p : scope.getDeclaredValues()) {
                            properties.add(p);
                        }
                        putResultProperties(json, properties, Collections.emptyList());
                        return null;
                    }
                });
            }
        } catch (NoSuspendedThreadException ex) {
            // Not suspended, no properties
            json.put("result", new JSONArray());
        } catch (GuestLanguageException ex) {
            fillExceptionDetails(json, ex);
        }
    }
    return new Params(json);
}
Also used : CommandProcessException(com.oracle.truffle.tools.chromeinspector.server.CommandProcessException) DebugValue(com.oracle.truffle.api.debug.DebugValue) JSONArray(org.json.JSONArray) Params(com.oracle.truffle.tools.chromeinspector.commands.Params) NoSuspendedThreadException(com.oracle.truffle.tools.chromeinspector.TruffleExecutionContext.NoSuspendedThreadException) DebugScope(com.oracle.truffle.api.debug.DebugScope) RemoteObject(com.oracle.truffle.tools.chromeinspector.types.RemoteObject) JSONObject(org.json.JSONObject) Collection(java.util.Collection) GuestLanguageException(com.oracle.truffle.tools.chromeinspector.TruffleExecutionContext.GuestLanguageException)

Example 5 with CommandProcessException

use of com.oracle.truffle.tools.chromeinspector.server.CommandProcessException in project graal by oracle.

the class TruffleRuntime method compileScript.

@Override
public Params compileScript(String expression, String sourceURL, boolean persistScript, long executionContextId) throws CommandProcessException {
    if (expression == null) {
        throw new CommandProcessException("An expression required.");
    }
    JSONObject ret = new JSONObject();
    ScriptsHandler sh = context.getScriptsHandler();
    try {
        if (sh != null) {
            Source source = createSource(expression, sourceURL);
            boolean parsed = false;
            String[] exceptionText = new String[1];
            if (context.getSuspendedInfo() != null) {
                try {
                    parsed = context.executeInSuspendThread(new SuspendThreadExecutable<Boolean>() {

                        @Override
                        public Boolean executeCommand() throws CommandProcessException {
                            try {
                                context.getEnv().parse(source);
                                return true;
                            } catch (Exception ex) {
                                // Didn't manage to parse this
                                exceptionText[0] = ex.getLocalizedMessage();
                                return false;
                            }
                        }
                    });
                } catch (GuestLanguageException ex) {
                    fillExceptionDetails(ret, ex);
                } catch (NoSuspendedThreadException ex) {
                    exceptionText[0] = ex.getLocalizedMessage();
                }
            } else {
                // Parse on the current thread will fail most likely due to a lack of context
                parsed = false;
                exceptionText[0] = "<Not suspended>";
            }
            if (parsed && persistScript) {
                int id = sh.assureLoaded(source);
                ret.put("scriptId", Integer.toString(id));
            }
            if (exceptionText[0] != null) {
                JSONObject exceptionDetails = new JSONObject();
                exceptionDetails.put("text", exceptionText[0]);
                ret.put("exceptionDetails", exceptionDetails);
            }
        }
    } finally {
        context.releaseScriptsHandler();
    }
    return new Params(ret);
}
Also used : CommandProcessException(com.oracle.truffle.tools.chromeinspector.server.CommandProcessException) Params(com.oracle.truffle.tools.chromeinspector.commands.Params) NoSuspendedThreadException(com.oracle.truffle.tools.chromeinspector.TruffleExecutionContext.NoSuspendedThreadException) Source(com.oracle.truffle.api.source.Source) NoSuspendedThreadException(com.oracle.truffle.tools.chromeinspector.TruffleExecutionContext.NoSuspendedThreadException) URISyntaxException(java.net.URISyntaxException) CommandProcessException(com.oracle.truffle.tools.chromeinspector.server.CommandProcessException) GuestLanguageException(com.oracle.truffle.tools.chromeinspector.TruffleExecutionContext.GuestLanguageException) JSONObject(org.json.JSONObject) GuestLanguageException(com.oracle.truffle.tools.chromeinspector.TruffleExecutionContext.GuestLanguageException)

Aggregations

CommandProcessException (com.oracle.truffle.tools.chromeinspector.server.CommandProcessException)11 Params (com.oracle.truffle.tools.chromeinspector.commands.Params)9 JSONObject (org.json.JSONObject)9 Breakpoint (com.oracle.truffle.api.debug.Breakpoint)5 GuestLanguageException (com.oracle.truffle.tools.chromeinspector.TruffleExecutionContext.GuestLanguageException)5 NoSuspendedThreadException (com.oracle.truffle.tools.chromeinspector.TruffleExecutionContext.NoSuspendedThreadException)5 DebugValue (com.oracle.truffle.api.debug.DebugValue)4 RemoteObject (com.oracle.truffle.tools.chromeinspector.types.RemoteObject)4 Script (com.oracle.truffle.tools.chromeinspector.types.Script)4 JSONArray (org.json.JSONArray)3 TruffleException (com.oracle.truffle.api.TruffleException)2 Source (com.oracle.truffle.api.source.Source)2 SourceSection (com.oracle.truffle.api.source.SourceSection)2 CallFrame (com.oracle.truffle.tools.chromeinspector.types.CallFrame)2 Location (com.oracle.truffle.tools.chromeinspector.types.Location)2 DebugScope (com.oracle.truffle.api.debug.DebugScope)1 SuspendedEvent (com.oracle.truffle.api.debug.SuspendedEvent)1 Result (com.oracle.truffle.tools.chromeinspector.commands.Result)1 Event (com.oracle.truffle.tools.chromeinspector.events.Event)1 URISyntaxException (java.net.URISyntaxException)1