Search in sources :

Example 6 with Source

use of org.graalvm.polyglot.Source in project graal by oracle.

the class StepTest method testMultipleActions.

@Test
public void testMultipleActions() throws Throwable {
    final Source source = testSource(// 1
    "ROOT(\n" + "  DEFINE(bar, STATEMENT),\n" + "  DEFINE(foo, ROOT(STATEMENT(CALL(bar)), \n" + "                   STATEMENT(CALL(loop)))),\n" + // 5
    "  DEFINE(loop,\n" + "    LOOP(3,\n" + "      STATEMENT),\n" + "    STATEMENT\n" + "  ),\n" + // 10
    "  STATEMENT(CALL(foo)),\n" + "  STATEMENT(CALL(foo)),\n" + "  STATEMENT,\n" + "  STATEMENT(CALL(loop)),\n" + "  STATEMENT,\n" + // 15
    "  STATEMENT,\n" + "  STATEMENT(CALL(loop)),\n" + "  STATEMENT\n" + ")\n");
    try (DebuggerSession session = startSession()) {
        session.suspendNextExecution();
        Breakpoint bp14 = Breakpoint.newBuilder(getSourceImpl(source)).lineIs(14).build();
        Breakpoint bp17 = Breakpoint.newBuilder(getSourceImpl(source)).lineIs(17).build();
        session.install(bp14);
        session.install(bp17);
        startEval(source);
        expectSuspended((SuspendedEvent event) -> {
            checkState(event, 10, true, "STATEMENT(CALL(foo))").prepareStepInto(1).prepareStepInto(1);
        });
        expectSuspended((SuspendedEvent event) -> {
            checkState(event, 2, true, "STATEMENT").prepareStepOut(1).prepareStepInto(2).prepareStepOver(3);
        });
        expectSuspended((SuspendedEvent event) -> {
            checkState(event, 8, true, "STATEMENT").prepareStepOut(2).prepareStepInto(3);
        });
        expectSuspended((SuspendedEvent event) -> {
            checkState(event, 2, true, "STATEMENT").prepareStepOver(1).prepareStepInto(2);
        });
        expectSuspended((SuspendedEvent event) -> {
            checkState(event, 7, true, "STATEMENT").prepareStepOver(3);
        });
        expectSuspended((SuspendedEvent event) -> {
            checkState(event, 8, true, "STATEMENT").prepareStepOut(2).prepareStepOver(1);
        });
        expectSuspended((SuspendedEvent event) -> {
            checkState(event, 12, true, "STATEMENT").prepareStepOver(1).prepareContinue();
        });
        // Breakpoint is hit
        expectSuspended((SuspendedEvent event) -> {
            checkState(event, 14, true, "STATEMENT").prepareStepInto(5).prepareKill();
        });
        // Breakpoint on line 17 not hit because of the kill
        expectKilled();
        Assert.assertEquals(1, bp14.getHitCount());
        Assert.assertEquals(0, bp17.getHitCount());
    }
}
Also used : Breakpoint(com.oracle.truffle.api.debug.Breakpoint) DebuggerSession(com.oracle.truffle.api.debug.DebuggerSession) SuspendedEvent(com.oracle.truffle.api.debug.SuspendedEvent) Source(org.graalvm.polyglot.Source) Test(org.junit.Test)

Example 7 with Source

use of org.graalvm.polyglot.Source in project graal by oracle.

the class StepTest method testNoPreparesAfterContinueOrKill.

@Test
public void testNoPreparesAfterContinueOrKill() throws Throwable {
    final Source source = testSource("ROOT(\n" + "  DEFINE(loop,\n" + "    LOOP(3,\n" + "      STATEMENT),\n" + "    STATEMENT\n" + "  ),\n" + "  STATEMENT(CALL(loop))\n" + ")\n");
    try (DebuggerSession session = startSession()) {
        session.suspendNextExecution();
        Breakpoint bp5 = Breakpoint.newBuilder(getSourceImpl(source)).lineIs(5).build();
        session.install(bp5);
        startEval(source);
        expectSuspended((SuspendedEvent event) -> {
            checkState(event, 7, true, "STATEMENT(CALL(loop))").prepareContinue();
            try {
                event.prepareStepInto(1);
                Assert.fail("IllegalStateException should have been thrown.");
            } catch (IllegalStateException ex) {
            // expected
            }
            try {
                event.prepareStepOver(1);
                Assert.fail("IllegalStateException should have been thrown.");
            } catch (IllegalStateException ex) {
            // expected
            }
            try {
                event.prepareStepOut(1);
                Assert.fail("IllegalStateException should have been thrown.");
            } catch (IllegalStateException ex) {
            // expected
            }
            try {
                event.prepareContinue();
                Assert.fail("IllegalStateException should have been thrown.");
            } catch (IllegalStateException ex) {
            // expected
            }
            try {
                event.prepareKill();
                Assert.fail("IllegalStateException should have been thrown.");
            } catch (IllegalStateException ex) {
            // expected
            }
        });
        expectSuspended((SuspendedEvent event) -> {
            checkState(event, 5, true, "STATEMENT").prepareKill();
            try {
                event.prepareStepInto(1);
                Assert.fail("IllegalStateException should have been thrown.");
            } catch (IllegalStateException ex) {
            // expected
            }
            try {
                event.prepareStepOver(1);
                Assert.fail("IllegalStateException should have been thrown.");
            } catch (IllegalStateException ex) {
            // expected
            }
            try {
                event.prepareStepOut(1);
                Assert.fail("IllegalStateException should have been thrown.");
            } catch (IllegalStateException ex) {
            // expected
            }
            try {
                event.prepareContinue();
                Assert.fail("IllegalStateException should have been thrown.");
            } catch (IllegalStateException ex) {
            // expected
            }
            try {
                event.prepareKill();
                Assert.fail("IllegalStateException should have been thrown.");
            } catch (IllegalStateException ex) {
            // expected
            }
        });
        expectKilled();
    }
}
Also used : Breakpoint(com.oracle.truffle.api.debug.Breakpoint) DebuggerSession(com.oracle.truffle.api.debug.DebuggerSession) SuspendedEvent(com.oracle.truffle.api.debug.SuspendedEvent) Source(org.graalvm.polyglot.Source) Test(org.junit.Test)

Example 8 with Source

use of org.graalvm.polyglot.Source in project graal by oracle.

the class StepTest method testIncompatibleSourceElements.

@Test
public void testIncompatibleSourceElements() {
    final Source source = testSource("ROOT(\n" + "  STATEMENT,\n" + "  EXPRESSION\n" + ")\n");
    // No SourceElements, no stepping/suspensions
    try (DebuggerSession session = startSession(new SourceElement[] {})) {
        startEval(source);
        session.suspendNextExecution();
        expectDone();
    }
    try (DebuggerSession session = startSession(new SourceElement[] {})) {
        Breakpoint breakpoint = Breakpoint.newBuilder(DebuggerTester.getSourceImpl(source)).lineIs(2).oneShot().build();
        session.install(breakpoint);
        startEval(source);
        expectSuspended((SuspendedEvent event) -> {
            checkState(event, 2, true, "STATEMENT");
            try {
                event.prepareStepInto(StepConfig.newBuilder().sourceElements(SourceElement.STATEMENT).build());
                fail();
            } catch (IllegalStateException ex) {
            // O.K.
            }
            try {
                event.prepareStepInto(StepConfig.newBuilder().sourceElements(SourceElement.EXPRESSION).build());
                fail();
            } catch (IllegalStateException ex) {
            // O.K.
            }
            try {
                event.prepareStepInto(1);
                fail();
            } catch (IllegalStateException ex) {
            // O.K.
            }
        });
        expectDone();
    }
    try (DebuggerSession session = startSession()) {
        startEval(source);
        session.suspendNextExecution();
        expectSuspended((SuspendedEvent event) -> {
            checkState(event, 2, true, "STATEMENT");
            try {
                event.prepareStepInto(StepConfig.newBuilder().sourceElements(SourceElement.EXPRESSION).build());
                fail();
            } catch (IllegalArgumentException ex) {
            // O.K.
            }
        });
        expectDone();
    }
    try (DebuggerSession session = startSession(SourceElement.EXPRESSION)) {
        startEval(source);
        session.suspendNextExecution();
        expectSuspended((SuspendedEvent event) -> {
            checkState(event, 3, true, "EXPRESSION");
            try {
                event.prepareStepInto(StepConfig.newBuilder().sourceElements(SourceElement.STATEMENT).build());
                fail();
            } catch (IllegalArgumentException ex) {
            // O.K.
            }
            // O.K.
            event.prepareStepInto(1);
            // O.K.
            event.prepareStepInto(StepConfig.newBuilder().sourceElements(SourceElement.EXPRESSION).build());
        });
        expectDone();
    }
}
Also used : Breakpoint(com.oracle.truffle.api.debug.Breakpoint) DebuggerSession(com.oracle.truffle.api.debug.DebuggerSession) SuspendedEvent(com.oracle.truffle.api.debug.SuspendedEvent) Source(org.graalvm.polyglot.Source) Test(org.junit.Test)

Example 9 with Source

use of org.graalvm.polyglot.Source in project graal by oracle.

the class StepTest method testStepIntoAndOut.

@Test
public void testStepIntoAndOut() throws Throwable {
    final Source source = testSource("ROOT(\n" + "  DEFINE(bar, STATEMENT),\n" + "  DEFINE(foo, ROOT(STATEMENT(CALL(bar)), \n" + "                   STATEMENT(CALL(bar)))),\n" + "  STATEMENT(CALL(foo)),\n" + "  STATEMENT(CALL(foo)),\n" + "  STATEMENT(CALL(foo))\n" + ")\n");
    try (DebuggerSession session = startSession()) {
        startEval(source);
        session.suspendNextExecution();
        expectSuspended((SuspendedEvent event) -> {
            checkState(event, 5, true, "STATEMENT(CALL(foo))").prepareStepInto(1);
        });
        expectSuspended((SuspendedEvent event) -> {
            checkState(event, 3, true, "STATEMENT(CALL(bar))").prepareStepOut(1);
        });
        expectSuspended((SuspendedEvent event) -> {
            checkState(event, 5, false, "CALL(foo)").prepareStepOver(1);
        });
        expectSuspended((SuspendedEvent event) -> {
            checkState(event, 6, true, "STATEMENT(CALL(foo))").prepareStepInto(1);
        });
        expectSuspended((SuspendedEvent event) -> {
            checkState(event, 3, true, "STATEMENT(CALL(bar))").prepareStepInto(1);
        });
        expectSuspended((SuspendedEvent event) -> {
            checkState(event, 2, true, "STATEMENT").prepareStepOut(1);
        });
        expectSuspended((SuspendedEvent event) -> {
            checkState(event, 3, false, "CALL(bar)").prepareStepOut(1);
        });
        expectSuspended((SuspendedEvent event) -> {
            checkState(event, 6, false, "CALL(foo)").prepareStepOut(1);
        });
        expectDone();
    }
}
Also used : DebuggerSession(com.oracle.truffle.api.debug.DebuggerSession) SuspendedEvent(com.oracle.truffle.api.debug.SuspendedEvent) Source(org.graalvm.polyglot.Source) Test(org.junit.Test)

Example 10 with Source

use of org.graalvm.polyglot.Source in project graal by oracle.

the class StepTest method testBlockStepIntoOver.

@Test
public void testBlockStepIntoOver() throws Throwable {
    final Source source = testSource("ROOT(\n" + "  STATEMENT,\n" + "  STATEMENT,\n" + "  STATEMENT,\n" + "  STATEMENT,\n" + "  STATEMENT,\n" + "  STATEMENT,\n" + "  STATEMENT,\n" + "  STATEMENT\n" + ")\n");
    try (DebuggerSession session = startSession()) {
        startEval(source);
        session.suspendNextExecution();
        expectSuspended((SuspendedEvent event) -> {
            checkState(event, 2, true, "STATEMENT").prepareStepInto(1);
        });
        expectSuspended((SuspendedEvent event) -> {
            checkState(event, 3, true, "STATEMENT").prepareStepInto(2);
        });
        expectSuspended((SuspendedEvent event) -> {
            checkState(event, 5, true, "STATEMENT").prepareStepOver(1);
        });
        expectSuspended((SuspendedEvent event) -> {
            checkState(event, 6, true, "STATEMENT").prepareStepOver(3);
        });
        expectSuspended((SuspendedEvent event) -> {
            checkState(event, 9, true, "STATEMENT").prepareContinue();
        });
        expectDone();
    }
}
Also used : DebuggerSession(com.oracle.truffle.api.debug.DebuggerSession) SuspendedEvent(com.oracle.truffle.api.debug.SuspendedEvent) Source(org.graalvm.polyglot.Source) Test(org.junit.Test)

Aggregations

Source (org.graalvm.polyglot.Source)196 Test (org.junit.Test)165 DebuggerSession (com.oracle.truffle.api.debug.DebuggerSession)103 SuspendedEvent (com.oracle.truffle.api.debug.SuspendedEvent)95 Breakpoint (com.oracle.truffle.api.debug.Breakpoint)51 Value (org.graalvm.polyglot.Value)31 Context (org.graalvm.polyglot.Context)25 DebugStackFrame (com.oracle.truffle.api.debug.DebugStackFrame)21 DebugValue (com.oracle.truffle.api.debug.DebugValue)20 TruffleInstrument (com.oracle.truffle.api.instrumentation.TruffleInstrument)14 Instrument (org.graalvm.polyglot.Instrument)14 Debugger (com.oracle.truffle.api.debug.Debugger)13 SourceSection (com.oracle.truffle.api.source.SourceSection)12 EventContext (com.oracle.truffle.api.instrumentation.EventContext)10 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)9 Engine (org.graalvm.polyglot.Engine)9 ArrayList (java.util.ArrayList)8 PolyglotException (org.graalvm.polyglot.PolyglotException)8 SuspensionFilter (com.oracle.truffle.api.debug.SuspensionFilter)7 AbstractInstrumentationTest (com.oracle.truffle.api.instrumentation.test.AbstractInstrumentationTest)7