From de48c8431b263e1a7e548927dfde82efee7eff51 Mon Sep 17 00:00:00 2001 From: Martin Entlicher Date: Wed, 25 Oct 2023 18:12:49 +0200 Subject: [PATCH] Add the mandatory experimental property 'debuggerId' and handle GET of /json/list path. (GR-49664) --- .../test/AbstractFunctionValueTest.java | 3 +- .../test/BuggyLanguageInspectDebugTest.java | 4 +- .../test/DisabledDomainTest.java | 2 +- .../test/ITLInspectDebugTest.java | 40 +++--- .../test/InspectorMessageTransportTest.java | 2 +- .../test/InspectorReceiverTest.java | 12 +- .../test/LazyAccessInspectDebugTest.java | 4 +- .../test/NotReadableValuesTest.java | 4 +- .../test/RelativeSourceInspectDebugTest.java | 12 +- .../test/SLInspectDebugTest.java | 123 ++++++++++++------ .../chromeinspector/test/TestMemoryLeaks.java | 6 +- .../chromeinspector/InspectorDebugger.java | 9 ++ .../domains/DebuggerDomain.java | 2 + .../server/InspectServerSession.java | 3 + .../server/InspectorServer.java | 15 ++- 15 files changed, 165 insertions(+), 76 deletions(-) diff --git a/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/AbstractFunctionValueTest.java b/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/AbstractFunctionValueTest.java index 8977f1319bc6..4136259d3279 100644 --- a/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/AbstractFunctionValueTest.java +++ b/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/AbstractFunctionValueTest.java @@ -65,7 +65,8 @@ protected final Future runWith(Object truffleObject) throws Exception { tester.sendMessage("{\"id\":1,\"method\":\"Runtime.enable\"}"); assertEquals("{\"result\":{},\"id\":1}", tester.getMessages(true).trim()); tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}"); - assertEquals("{\"result\":{},\"id\":2}", tester.getMessages(true).trim()); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); tester.sendMessage("{\"id\":3,\"method\":\"Debugger.setBreakpointByUrl\",\"params\":{\"lineNumber\":3,\"url\":\"" + FILE_NAME + "\",\"columnNumber\":0,\"condition\":\"\"}}"); assertTrue(tester.compareReceivedMessages( "{\"result\":{\"breakpointId\":\"1\",\"locations\":[]},\"id\":3}\n")); diff --git a/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/BuggyLanguageInspectDebugTest.java b/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/BuggyLanguageInspectDebugTest.java index 9550b78dd723..04aa4b0e1246 100644 --- a/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/BuggyLanguageInspectDebugTest.java +++ b/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/BuggyLanguageInspectDebugTest.java @@ -137,9 +137,9 @@ private void testBuggyCalls(AtomicReference language, String pref tester.setErr(errorStream); tester.sendMessage("{\"id\":1,\"method\":\"Runtime.enable\"}"); tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}"); - assertTrue(tester.compareReceivedMessages( + tester.receiveMessages( "{\"result\":{},\"id\":1}\n" + - "{\"result\":{},\"id\":2}\n")); + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + diff --git a/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/DisabledDomainTest.java b/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/DisabledDomainTest.java index efc9fbd75ddd..26a0d5af4a1e 100644 --- a/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/DisabledDomainTest.java +++ b/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/DisabledDomainTest.java @@ -53,7 +53,7 @@ public void testDisabledDomainsCalls() throws Exception { tester.sendMessage("{\"id\":10," + debuggerMessage); assertEquals("{\"id\":10,\"error\":{\"code\":-32601,\"message\":\"Domain Debugger is disabled.\"}}", tester.getMessages(true).trim()); tester.sendMessage("{\"id\":11,\"method\":\"Debugger.enable\"}"); - assertEquals("{\"result\":{},\"id\":11}", tester.getMessages(true).trim()); + tester.receiveMessages("{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":11}\n"); tester.sendMessage("{\"id\":12," + debuggerMessage); assertEquals("{\"result\":{\"breakpointId\":\"1\",\"locations\":[]},\"id\":12}", tester.getMessages(true).trim()); tester.sendMessage("{\"id\":13,\"method\":\"Debugger.disable\"}"); diff --git a/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/ITLInspectDebugTest.java b/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/ITLInspectDebugTest.java index 6c45d1ed16ee..76e785164c21 100644 --- a/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/ITLInspectDebugTest.java +++ b/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/ITLInspectDebugTest.java @@ -70,7 +70,8 @@ public void testSuspendInInitialization() throws Exception { tester.sendMessage("{\"id\":1,\"method\":\"Runtime.enable\"}"); assertEquals("{\"result\":{},\"id\":1}", tester.getMessages(true).trim()); tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}"); - assertEquals("{\"result\":{},\"id\":2}", tester.getMessages(true).trim()); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + @@ -101,7 +102,8 @@ public void testSuspendInInitialization() throws Exception { tester.sendMessage("{\"id\":1,\"method\":\"Runtime.enable\"}"); assertEquals("{\"result\":{},\"id\":1}", tester.getMessages(true).trim()); tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}"); - assertEquals("{\"result\":{},\"id\":2}", tester.getMessages(true).trim()); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + @@ -142,7 +144,8 @@ public void testSuspendInInternal() throws Exception { tester.sendMessage("{\"id\":1,\"method\":\"Runtime.enable\"}"); assertEquals("{\"result\":{},\"id\":1}", tester.getMessages(true).trim()); tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}"); - assertEquals("{\"result\":{},\"id\":2}", tester.getMessages(true).trim()); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + @@ -172,7 +175,8 @@ public void testSuspendInInternal() throws Exception { tester.sendMessage("{\"id\":1,\"method\":\"Runtime.enable\"}"); assertEquals("{\"result\":{},\"id\":1}", tester.getMessages(true).trim()); tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}"); - assertEquals("{\"result\":{},\"id\":2}", tester.getMessages(true).trim()); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + @@ -213,7 +217,8 @@ public void testThis() throws Exception { tester.sendMessage("{\"id\":1,\"method\":\"Runtime.enable\"}"); assertEquals("{\"result\":{},\"id\":1}", tester.getMessages(true).trim()); tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}"); - assertEquals("{\"result\":{},\"id\":2}", tester.getMessages(true).trim()); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + @@ -269,9 +274,10 @@ public void testShortURIs() throws Exception { tester.sendMessage("{\"id\":1,\"method\":\"Runtime.enable\"}"); tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}"); tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); - assertTrue(tester.compareReceivedMessages( + tester.receiveMessages( "{\"result\":{},\"id\":1}\n" + - "{\"result\":{},\"id\":2}\n" + + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); + assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + "{\"method\":\"Runtime.executionContextCreated\",\"params\":{\"context\":{\"origin\":\"\",\"name\":\"test\",\"id\":1}}}\n")); tester.eval(source1); @@ -319,9 +325,10 @@ public void testOutput() throws Exception { tester.sendMessage("{\"id\":1,\"method\":\"Runtime.enable\"}"); tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}"); tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); - assertTrue(tester.compareReceivedMessages( + tester.receiveMessages( "{\"result\":{},\"id\":1}\n" + - "{\"result\":{},\"id\":2}\n" + + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); + assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + "{\"method\":\"Runtime.executionContextCreated\",\"params\":{\"context\":{\"origin\":\"\",\"name\":\"test\",\"id\":1}}}\n")); tester.eval(source); @@ -387,9 +394,10 @@ public void testOutputNoNL() throws Exception { tester.sendMessage("{\"id\":1,\"method\":\"Runtime.enable\"}"); tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}"); tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); - assertTrue(tester.compareReceivedMessages( + tester.receiveMessages( "{\"result\":{},\"id\":1}\n" + - "{\"result\":{},\"id\":2}\n" + + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); + assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + "{\"method\":\"Runtime.executionContextCreated\",\"params\":{\"context\":{\"origin\":\"\",\"name\":\"test\",\"id\":1}}}\n")); tester.eval(source); @@ -426,9 +434,10 @@ public void testAsynchronousStackTraces() throws Exception { tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}"); tester.sendMessage("{\"id\":3,\"method\":\"Debugger.setAsyncCallStackDepth\",\"params\":{\"maxDepth\":1}}"); tester.sendMessage("{\"id\":4,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); - assertTrue(tester.compareReceivedMessages( + tester.receiveMessages( "{\"result\":{},\"id\":1}\n" + - "{\"result\":{},\"id\":2}\n" + + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); + assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + "{\"result\":{},\"id\":4}\n" + "{\"method\":\"Runtime.executionContextCreated\",\"params\":{\"context\":{\"origin\":\"\",\"name\":\"test\",\"id\":1}}}\n")); @@ -511,9 +520,10 @@ public void testSuspendALot() throws Exception { tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}"); tester.sendMessage("{\"id\":3,\"method\":\"Debugger.setAsyncCallStackDepth\",\"params\":{\"maxDepth\":1}}"); tester.sendMessage("{\"id\":4,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); - assertTrue(tester.compareReceivedMessages( + tester.receiveMessages( "{\"result\":{},\"id\":1}\n" + - "{\"result\":{},\"id\":2}\n" + + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); + assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + "{\"result\":{},\"id\":4}\n" + "{\"method\":\"Runtime.executionContextCreated\",\"params\":{\"context\":{\"origin\":\"\",\"name\":\"test\",\"id\":1}}}\n")); diff --git a/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/InspectorMessageTransportTest.java b/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/InspectorMessageTransportTest.java index b036120031d1..0bd7b0f72f6b 100644 --- a/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/InspectorMessageTransportTest.java +++ b/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/InspectorMessageTransportTest.java @@ -61,7 +61,7 @@ public class InspectorMessageTransportTest extends EnginesGCedTest { private static final String[] MESSAGES_TO_BACKEND; private static final String[] MESSAGES_TO_CLIENT = { "{\"result\":{},\"id\":5}", - "{\"result\":{},\"id\":6}", + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "{\"result\":{},\"id\":7}", "{\"result\":{},\"id\":8}", "{\"result\":{},\"id\":20}", diff --git a/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/InspectorReceiverTest.java b/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/InspectorReceiverTest.java index 974844e0c7ab..54a5447c64d7 100644 --- a/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/InspectorReceiverTest.java +++ b/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/InspectorReceiverTest.java @@ -52,7 +52,8 @@ public void testThisReceiver1() throws Exception { tester.sendMessage("{\"id\":1,\"method\":\"Runtime.enable\"}"); assertEquals("{\"result\":{},\"id\":1}", tester.getMessages(true).trim()); tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}"); - assertEquals("{\"result\":{},\"id\":2}", tester.getMessages(true).trim()); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + @@ -98,7 +99,8 @@ public void testThisReceiver2() throws Exception { tester.sendMessage("{\"id\":1,\"method\":\"Runtime.enable\"}"); assertEquals("{\"result\":{},\"id\":1}", tester.getMessages(true).trim()); tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}"); - assertEquals("{\"result\":{},\"id\":2}", tester.getMessages(true).trim()); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + @@ -154,7 +156,8 @@ private static void checkMultipleReceivers(String receiver, String sourceHash) t tester.sendMessage("{\"id\":1,\"method\":\"Runtime.enable\"}"); assertEquals("{\"result\":{},\"id\":1}", tester.getMessages(true).trim()); tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}"); - assertEquals("{\"result\":{},\"id\":2}", tester.getMessages(true).trim()); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + @@ -211,7 +214,8 @@ public void testOtherReceiver1() throws Exception { tester.sendMessage("{\"id\":1,\"method\":\"Runtime.enable\"}"); assertEquals("{\"result\":{},\"id\":1}", tester.getMessages(true).trim()); tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}"); - assertEquals("{\"result\":{},\"id\":2}", tester.getMessages(true).trim()); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + diff --git a/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/LazyAccessInspectDebugTest.java b/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/LazyAccessInspectDebugTest.java index b99aea7f1126..e725f05d1c65 100644 --- a/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/LazyAccessInspectDebugTest.java +++ b/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/LazyAccessInspectDebugTest.java @@ -81,9 +81,9 @@ public void testReadWithSideEffects() throws Exception { InspectorTester tester = InspectorTester.start(true); tester.sendMessage("{\"id\":1,\"method\":\"Runtime.enable\"}"); tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}"); - assertTrue(tester.compareReceivedMessages( + tester.receiveMessages( "{\"result\":{},\"id\":1}\n" + - "{\"result\":{},\"id\":2}\n")); + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + diff --git a/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/NotReadableValuesTest.java b/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/NotReadableValuesTest.java index 2a55f9661f34..a07f844fc91e 100644 --- a/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/NotReadableValuesTest.java +++ b/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/NotReadableValuesTest.java @@ -63,9 +63,9 @@ public void testNotReadableVariables() throws Exception { InspectorTester tester = InspectorTester.start(true); tester.sendMessage("{\"id\":1,\"method\":\"Runtime.enable\"}"); tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}"); - assertTrue(tester.compareReceivedMessages( + tester.receiveMessages( "{\"result\":{},\"id\":1}\n" + - "{\"result\":{},\"id\":2}\n")); + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + diff --git a/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/RelativeSourceInspectDebugTest.java b/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/RelativeSourceInspectDebugTest.java index a0af764d4e48..cb4a176deaf3 100644 --- a/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/RelativeSourceInspectDebugTest.java +++ b/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/RelativeSourceInspectDebugTest.java @@ -123,7 +123,8 @@ public void testSourcePath() throws Exception { tester.sendMessage("{\"id\":1,\"method\":\"Runtime.enable\"}"); assertEquals("{\"result\":{},\"id\":1}", tester.getMessages(true).trim()); tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}"); - assertEquals("{\"result\":{},\"id\":2}", tester.getMessages(true).trim()); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); // @formatter:off The default formatting makes unnecessarily big indents and illogical line breaks @@ -183,7 +184,8 @@ public void testNonExistingSourcePath() throws Exception { tester.sendMessage("{\"id\":1,\"method\":\"Runtime.enable\"}"); assertEquals("{\"result\":{},\"id\":1}", tester.getMessages(true).trim()); tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}"); - assertEquals("{\"result\":{},\"id\":2}", tester.getMessages(true).trim()); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); String resolvedPath = new File("relative/path").toPath().toAbsolutePath().toUri().toString(); @@ -305,7 +307,8 @@ private static void testBreakpoints(int sectionLine, int sectionColumn, int bpLi tester.sendMessage("{\"id\":1,\"method\":\"Runtime.enable\"}"); assertEquals("{\"result\":{},\"id\":1}", tester.getMessages(true).trim()); tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}"); - assertEquals("{\"result\":{},\"id\":2}", tester.getMessages(true).trim()); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); // @formatter:off The default formatting makes unnecessarily big indents and illogical line breaks @@ -383,7 +386,8 @@ public void testEagerSourceLoad() throws Exception { assertTrue(tester.compareReceivedMessages( "{\"method\":\"Debugger.scriptParsed\",\"params\":{\"endLine\":3,\"scriptId\":\"1\",\"endColumn\":0,\"startColumn\":0,\"startLine\":0,\"length\":" + 180 + ",\"executionContextId\":1,\"url\":\"" + prolog2URI + "\",\"hash\":\"ddbb5c60e6d93544f2f9afd9f84696c2ffd09768\"}}\n")); - assertEquals("{\"result\":{},\"id\":2}", tester.getMessages(true).trim()); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); // @formatter:off The default formatting makes unnecessarily big indents and illogical line breaks diff --git a/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/SLInspectDebugTest.java b/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/SLInspectDebugTest.java index 74461c209e05..8c6e12e08431 100644 --- a/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/SLInspectDebugTest.java +++ b/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/SLInspectDebugTest.java @@ -201,7 +201,8 @@ public void testInitialSuspendAndSource() throws Exception { tester.sendMessage("{\"id\":1,\"method\":\"Runtime.enable\"}"); assertEquals("{\"result\":{},\"id\":1}", tester.getMessages(true).trim()); tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}"); - assertEquals("{\"result\":{},\"id\":2}", tester.getMessages(true).trim()); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + @@ -243,8 +244,10 @@ public void testStepping() throws Exception { tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}"); tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); assertTrue(tester.compareReceivedMessages( - "{\"result\":{},\"id\":1}\n" + - "{\"result\":{},\"id\":2}\n" + + "{\"result\":{},\"id\":1}\n")); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); + assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + "{\"method\":\"Runtime.executionContextCreated\",\"params\":{\"context\":{\"origin\":\"\",\"name\":\"test\",\"id\":1}}}\n")); tester.eval(source); @@ -331,8 +334,10 @@ public void testBreakpoints() throws Exception { tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); String slTestURI = InspectorTester.getStringURI(source.getURI()); assertTrue(tester.compareReceivedMessages( - "{\"result\":{},\"id\":1}\n" + - "{\"result\":{},\"id\":2}\n" + + "{\"result\":{},\"id\":1}\n")); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); + assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + "{\"method\":\"Runtime.executionContextCreated\",\"params\":{\"context\":{\"origin\":\"\",\"name\":\"test\",\"id\":1}}}\n")); @@ -408,8 +413,10 @@ public void testBreakpointDeactivation() throws Exception { tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); String srcURL = InspectorTester.getStringURI(source.getURI()); assertTrue(tester.compareReceivedMessages( - "{\"result\":{},\"id\":1}\n" + - "{\"result\":{},\"id\":2}\n" + + "{\"result\":{},\"id\":1}\n")); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); + assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + "{\"method\":\"Runtime.executionContextCreated\",\"params\":{\"context\":{\"origin\":\"\",\"name\":\"test\",\"id\":1}}}\n")); tester.sendMessage("{\"id\":3,\"method\":\"Debugger.setBreakpointByUrl\",\"params\":{\"lineNumber\":9,\"url\":\"" + srcURL + "\",\"columnNumber\":0,\"condition\":\"\"}}"); @@ -564,8 +571,11 @@ private void testGuestFunctionBreakpoints(boolean useConsoleUtilities) throws Ex tester.sendMessage("{\"id\":1,\"method\":\"Runtime.enable\"}"); tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}"); tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); - assertTrue(tester.compareReceivedMessages("{\"result\":{},\"id\":1}\n" + - "{\"result\":{},\"id\":2}\n" + + assertTrue(tester.compareReceivedMessages( + "{\"result\":{},\"id\":1}\n")); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); + assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + "{\"method\":\"Runtime.executionContextCreated\",\"params\":{\"context\":{\"origin\":\"\",\"name\":\"test\",\"id\":1}}}\n")); tester.eval(source); @@ -645,8 +655,11 @@ private void testBuiltInFunctionBreakpoints(boolean useConsoleUtilities) throws tester.sendMessage("{\"id\":1,\"method\":\"Runtime.enable\"}"); tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}"); tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); - assertTrue(tester.compareReceivedMessages("{\"result\":{},\"id\":1}\n" + - "{\"result\":{},\"id\":2}\n" + + assertTrue(tester.compareReceivedMessages( + "{\"result\":{},\"id\":1}\n")); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); + assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + "{\"method\":\"Runtime.executionContextCreated\",\"params\":{\"context\":{\"origin\":\"\",\"name\":\"test\",\"id\":1}}}\n")); tester.eval(source); @@ -721,8 +734,11 @@ public void testScopes() throws Exception { tester.sendMessage("{\"id\":1,\"method\":\"Runtime.enable\"}"); tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}"); tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); - assertTrue(tester.compareReceivedMessages("{\"result\":{},\"id\":1}\n" + - "{\"result\":{},\"id\":2}\n" + + assertTrue(tester.compareReceivedMessages( + "{\"result\":{},\"id\":1}\n")); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); + assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + "{\"method\":\"Runtime.executionContextCreated\",\"params\":{\"context\":{\"origin\":\"\",\"name\":\"test\",\"id\":1}}}\n")); tester.eval(source); @@ -798,8 +814,11 @@ public void testNotSuspended() throws Exception { tester.sendMessage("{\"id\":1,\"method\":\"Runtime.enable\"}"); tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}"); tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); - assertTrue(tester.compareReceivedMessages("{\"result\":{},\"id\":1}\n" + - "{\"result\":{},\"id\":2}\n" + + assertTrue(tester.compareReceivedMessages( + "{\"result\":{},\"id\":1}\n")); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); + assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + "{\"method\":\"Runtime.executionContextCreated\",\"params\":{\"context\":{\"origin\":\"\",\"name\":\"test\",\"id\":1}}}\n")); tester.eval(source); @@ -857,8 +876,11 @@ public void testNoInternalSources() throws Exception { tester.sendMessage("{\"id\":1,\"method\":\"Runtime.enable\"}"); tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}"); tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); - assertTrue(tester.compareReceivedMessages("{\"result\":{},\"id\":1}\n" + - "{\"result\":{},\"id\":2}\n" + + assertTrue(tester.compareReceivedMessages( + "{\"result\":{},\"id\":1}\n")); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); + assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + "{\"method\":\"Runtime.executionContextCreated\",\"params\":{\"context\":{\"origin\":\"\",\"name\":\"test\",\"id\":1}}}\n")); long id = tester.getContextId(); @@ -1125,8 +1147,11 @@ public void testNoBlackboxedSources() throws Exception { tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}"); tester.sendMessage("{\"id\":3,\"method\":\"Debugger.setBlackboxPatterns\",\"params\":{\"patterns\":[\"BlackboxedFunc.sl\"]}}"); tester.sendMessage("{\"id\":4,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); - assertTrue(tester.compareReceivedMessages("{\"result\":{},\"id\":1}\n" + - "{\"result\":{},\"id\":2}\n" + + assertTrue(tester.compareReceivedMessages( + "{\"result\":{},\"id\":1}\n")); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); + assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + "{\"result\":{},\"id\":4}\n" + "{\"method\":\"Runtime.executionContextCreated\",\"params\":{\"context\":{\"origin\":\"\",\"name\":\"test\",\"id\":1}}}\n")); @@ -1244,8 +1269,10 @@ public void testRestartFrame() throws Exception { tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); String srcURL = InspectorTester.getStringURI(source.getURI()); assertTrue(tester.compareReceivedMessages( - "{\"result\":{},\"id\":1}\n" + - "{\"result\":{},\"id\":2}\n" + + "{\"result\":{},\"id\":1}\n")); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); + assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + "{\"method\":\"Runtime.executionContextCreated\",\"params\":{\"context\":{\"origin\":\"\",\"name\":\"test\",\"id\":1}}}\n")); tester.sendMessage("{\"id\":3,\"method\":\"Debugger.setBreakpointByUrl\",\"params\":{\"lineNumber\":6,\"url\":\"" + srcURL + "\",\"columnNumber\":0,\"condition\":\"\"}}"); @@ -1375,8 +1402,10 @@ public void testReturnValue() throws Exception { tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}"); tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); assertTrue(tester.compareReceivedMessages( - "{\"result\":{},\"id\":1}\n" + - "{\"result\":{},\"id\":2}\n" + + "{\"result\":{},\"id\":1}\n")); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); + assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + "{\"method\":\"Runtime.executionContextCreated\",\"params\":{\"context\":{\"origin\":\"\",\"name\":\"test\",\"id\":1}}}\n")); tester.eval(source); @@ -1585,8 +1614,10 @@ public void testBreakpointCorrections() throws Exception { tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); String srcURL = InspectorTester.getStringURI(source.getURI()); assertTrue(tester.compareReceivedMessages( - "{\"result\":{},\"id\":1}\n" + - "{\"result\":{},\"id\":2}\n" + + "{\"result\":{},\"id\":1}\n")); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); + assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + "{\"method\":\"Runtime.executionContextCreated\",\"params\":{\"context\":{\"origin\":\"\",\"name\":\"test\",\"id\":1}}}\n")); @@ -1666,8 +1697,10 @@ public void testPossibleBreakpoints() throws Exception { tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); String srcURL = InspectorTester.getStringURI(source.getURI()); assertTrue(tester.compareReceivedMessages( - "{\"result\":{},\"id\":1}\n" + - "{\"result\":{},\"id\":2}\n" + + "{\"result\":{},\"id\":1}\n")); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); + assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + "{\"method\":\"Runtime.executionContextCreated\",\"params\":{\"context\":{\"origin\":\"\",\"name\":\"test\",\"id\":1}}}\n")); @@ -1732,8 +1765,10 @@ public void testThrown() throws Exception { tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); String srcURL = InspectorTester.getStringURI(source.getURI()); assertTrue(tester.compareReceivedMessages( - "{\"result\":{},\"id\":1}\n" + - "{\"result\":{},\"id\":2}\n" + + "{\"result\":{},\"id\":1}\n")); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); + assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + "{\"method\":\"Runtime.executionContextCreated\",\"params\":{\"context\":{\"origin\":\"\",\"name\":\"test\",\"id\":1}}}\n")); tester.sendMessage("{\"id\":3,\"method\":\"Debugger.setPauseOnExceptions\",\"params\":{\"state\":\"uncaught\"}}"); @@ -1781,8 +1816,10 @@ public void testSetVariableValue() throws Exception { tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); String srcURL = InspectorTester.getStringURI(source.getURI()); assertTrue(tester.compareReceivedMessages( - "{\"result\":{},\"id\":1}\n" + - "{\"result\":{},\"id\":2}\n" + + "{\"result\":{},\"id\":1}\n")); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); + assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + "{\"method\":\"Runtime.executionContextCreated\",\"params\":{\"context\":{\"origin\":\"\",\"name\":\"test\",\"id\":1}}}\n")); int suspendLine = 15; @@ -1870,8 +1907,10 @@ public void testMemberCompletionChrome() throws Exception { tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); String srcURL = InspectorTester.getStringURI(source.getURI()); assertTrue(tester.compareReceivedMessages( - "{\"result\":{},\"id\":1}\n" + - "{\"result\":{},\"id\":2}\n" + + "{\"result\":{},\"id\":1}\n")); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); + assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + "{\"method\":\"Runtime.executionContextCreated\",\"params\":{\"context\":{\"origin\":\"\",\"name\":\"test\",\"id\":1}}}\n")); tester.eval(source); @@ -1914,8 +1953,10 @@ public void testMemberCompletionVSCode() throws Exception { tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); String srcURL = InspectorTester.getStringURI(source.getURI()); assertTrue(tester.compareReceivedMessages( - "{\"result\":{},\"id\":1}\n" + - "{\"result\":{},\"id\":2}\n" + + "{\"result\":{},\"id\":1}\n")); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); + assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + "{\"method\":\"Runtime.executionContextCreated\",\"params\":{\"context\":{\"origin\":\"\",\"name\":\"test\",\"id\":1}}}\n")); tester.eval(source); @@ -1953,8 +1994,10 @@ public void testCompletionUpdate() throws Exception { tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}"); tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); assertTrue(tester.compareReceivedMessages( - "{\"result\":{},\"id\":1}\n" + - "{\"result\":{},\"id\":2}\n" + + "{\"result\":{},\"id\":1}\n")); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); + assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + "{\"method\":\"Runtime.executionContextCreated\",\"params\":{\"context\":{\"origin\":\"\",\"name\":\"test\",\"id\":1}}}\n")); tester.eval(source); @@ -2012,8 +2055,10 @@ public void testObjectGroups() throws Exception { tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); String srcURL = InspectorTester.getStringURI(source.getURI()); assertTrue(tester.compareReceivedMessages( - "{\"result\":{},\"id\":1}\n" + - "{\"result\":{},\"id\":2}\n" + + "{\"result\":{},\"id\":1}\n")); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); + assertTrue(tester.compareReceivedMessages( "{\"result\":{},\"id\":3}\n" + "{\"method\":\"Runtime.executionContextCreated\",\"params\":{\"context\":{\"origin\":\"\",\"name\":\"test\",\"id\":1}}}\n")); tester.eval(source); diff --git a/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/TestMemoryLeaks.java b/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/TestMemoryLeaks.java index 91598da34574..8cefd9132f4c 100644 --- a/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/TestMemoryLeaks.java +++ b/tools/src/com.oracle.truffle.tools.chromeinspector.test/src/com/oracle/truffle/tools/chromeinspector/test/TestMemoryLeaks.java @@ -68,9 +68,11 @@ public void testRemoteObjectsLeak() throws Exception { tester.sendMessage("{\"id\":1,\"method\":\"Runtime.enable\"}"); tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}"); tester.sendMessage("{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"); + assertTrue(tester.compareReceivedMessages( + "{\"result\":{},\"id\":1}\n")); + tester.receiveMessages( + "{\"result\":{\"debuggerId\":\"UniqueDebuggerId.", "},\"id\":2}\n"); assertTrue(tester.compareReceivedMessages("" + - "{\"result\":{},\"id\":1}\n" + - "{\"result\":{},\"id\":2}\n" + "{\"result\":{},\"id\":3}\n" + "{\"method\":\"Runtime.executionContextCreated\",\"params\":{\"context\":{\"origin\":\"\",\"name\":\"test\",\"id\":1}}}\n")); tester.eval(source); diff --git a/tools/src/com.oracle.truffle.tools.chromeinspector/src/com/oracle/truffle/tools/chromeinspector/InspectorDebugger.java b/tools/src/com.oracle.truffle.tools.chromeinspector/src/com/oracle/truffle/tools/chromeinspector/InspectorDebugger.java index 6c4377e85465..ad87616b8c9c 100644 --- a/tools/src/com.oracle.truffle.tools.chromeinspector/src/com/oracle/truffle/tools/chromeinspector/InspectorDebugger.java +++ b/tools/src/com.oracle.truffle.tools.chromeinspector/src/com/oracle/truffle/tools/chromeinspector/InspectorDebugger.java @@ -42,6 +42,7 @@ import java.util.concurrent.ThreadFactory; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLock; @@ -105,6 +106,8 @@ public final class InspectorDebugger extends DebuggerDomain { "\\s*\\k\\.push\\(Object\\.getOwnPropertyNames\\(\\k\\)\\)" + "\\};\\s*return\\s+\\k\\}\\)\\((?.*)\\)$"); + private static final AtomicLong lastUniqueId = new AtomicLong(); + private final InspectorExecutionContext context; private final Object suspendLock = new Object(); private volatile SuspendedCallbackImpl suspendedCallback; @@ -121,6 +124,7 @@ public final class InspectorDebugger extends DebuggerDomain { private final Phaser onSuspendPhaser = new Phaser(); private final BlockingQueue suspendThreadExecutables = new LinkedBlockingQueue<>(); private final ReadWriteLock domainLock; + private final long uniqueId = lastUniqueId.incrementAndGet(); public InspectorDebugger(InspectorExecutionContext context, boolean suspend, ReadWriteLock domainLock) { this.context = context; @@ -153,6 +157,11 @@ public void execute(CancellableRunnable executable) throws NoSuspendedThreadExce } } + @Override + public String getUniqueDebuggerId() { + return "UniqueDebuggerId." + uniqueId; + } + private void startSession() { Debugger tdbg = context.getEnv().lookup(context.getEnv().getInstruments().get("debugger"), Debugger.class); suspendedCallback = new SuspendedCallbackImpl(); diff --git a/tools/src/com.oracle.truffle.tools.chromeinspector/src/com/oracle/truffle/tools/chromeinspector/domains/DebuggerDomain.java b/tools/src/com.oracle.truffle.tools.chromeinspector/src/com/oracle/truffle/tools/chromeinspector/domains/DebuggerDomain.java index c18da3e217ce..45788a201794 100644 --- a/tools/src/com.oracle.truffle.tools.chromeinspector/src/com/oracle/truffle/tools/chromeinspector/domains/DebuggerDomain.java +++ b/tools/src/com.oracle.truffle.tools.chromeinspector/src/com/oracle/truffle/tools/chromeinspector/domains/DebuggerDomain.java @@ -38,6 +38,8 @@ public abstract class DebuggerDomain extends Domain { protected DebuggerDomain() { } + public abstract String getUniqueDebuggerId(); + public abstract void setAsyncCallStackDepth(int maxDepth) throws CommandProcessException; public abstract void setBlackboxPatterns(String[] patterns); diff --git a/tools/src/com.oracle.truffle.tools.chromeinspector/src/com/oracle/truffle/tools/chromeinspector/server/InspectServerSession.java b/tools/src/com.oracle.truffle.tools.chromeinspector/src/com/oracle/truffle/tools/chromeinspector/server/InspectServerSession.java index f1b018e72cee..e871dfd3f02e 100644 --- a/tools/src/com.oracle.truffle.tools.chromeinspector/src/com/oracle/truffle/tools/chromeinspector/server/InspectServerSession.java +++ b/tools/src/com.oracle.truffle.tools.chromeinspector/src/com/oracle/truffle/tools/chromeinspector/server/InspectServerSession.java @@ -390,6 +390,9 @@ private Params doProcessCommand(Command cmd, CommandPostProcessor postProcessor) runtime.releaseObjectGroup(json.optString("objectGroup")); break; case "Debugger.enable": + JSONObject dbgJson = new JSONObject(); + dbgJson.put("debuggerId", debugger.getUniqueDebuggerId()); + resultParams = new Params(dbgJson); debugger.enable(); break; case "Debugger.disable": diff --git a/tools/src/com.oracle.truffle.tools.chromeinspector/src/com/oracle/truffle/tools/chromeinspector/server/InspectorServer.java b/tools/src/com.oracle.truffle.tools.chromeinspector/src/com/oracle/truffle/tools/chromeinspector/server/InspectorServer.java index 464e3c2e2027..31add7248573 100644 --- a/tools/src/com.oracle.truffle.tools.chromeinspector/src/com/oracle/truffle/tools/chromeinspector/server/InspectorServer.java +++ b/tools/src/com.oracle.truffle.tools.chromeinspector/src/com/oracle/truffle/tools/chromeinspector/server/InspectorServer.java @@ -31,6 +31,8 @@ import java.net.Inet4Address; import java.net.InetAddress; import java.net.InetSocketAddress; +import java.net.URI; +import java.net.URISyntaxException; import java.net.UnknownHostException; import java.nio.ByteBuffer; import java.nio.channels.ByteChannel; @@ -308,15 +310,22 @@ private class JSONHandler implements Function { @Override public HttpResponse apply(HttpRequest request) { if ("GET".equals(request.getMethod())) { - String uri = request.getUri(); + String uriStr = request.getUri(); + URI uri; + try { + uri = new URI(uriStr); + } catch (URISyntaxException ex) { + return null; + } + String uriPath = uri.getPath(); String responseJson = null; - if ("/json/version".equals(uri)) { + if ("/json/version".equals(uriPath)) { JSONObject version = new JSONObject(); version.put("Browser", "GraalVM"); version.put("Protocol-Version", "1.2"); responseJson = version.toString(); } - if ("/json".equals(uri)) { + if ("/json".equals(uriPath) || "/json/list".equals(uriPath)) { JSONArray json = new JSONArray(); for (ServerPathSession serverPathSession : sessions.values()) { final String path = serverPathSession.pathContainingToken;