From 6663329c3fada921ef40eebbc06f0d98dbe61780 Mon Sep 17 00:00:00 2001 From: nightwing Date: Sat, 24 Feb 2018 01:45:11 +0400 Subject: [PATCH 1/3] workaround for node 9 segfaulting when running without breakpoints --- .../c9.ide.run.debug/debuggers/chrome/chromedebugger.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/plugins/c9.ide.run.debug/debuggers/chrome/chromedebugger.js b/plugins/c9.ide.run.debug/debuggers/chrome/chromedebugger.js index 6adcdebd..db16d330 100644 --- a/plugins/c9.ide.run.debug/debuggers/chrome/chromedebugger.js +++ b/plugins/c9.ide.run.debug/debuggers/chrome/chromedebugger.js @@ -80,7 +80,14 @@ define(function(require, exports, module) { } var list = breakpoints.slice(0); - var retries = 0; + if (list.length == 0) { + // node v9.5 segfaults when there are no breakpoints + list.push({ + path: "_c9_node_segfault_workaround_", + line: 100, + enabled: true, + }); + } listBreakpoints(function handleBps(err, remoteBreakpoints) { if (err) return callback(err); From b577ee0f2520d75a331c99e4e97dfc8b7b5d4d0d Mon Sep 17 00:00:00 2001 From: nightwing Date: Sat, 24 Feb 2018 01:46:10 +0400 Subject: [PATCH 2/3] ignore consoleApiCalled messages since they are not used in ui --- plugins/c9.ide.run.debug/debuggers/chrome/Debugger.js | 10 +++++++++- .../debuggers/chrome/DevtoolsProtocol.js | 1 - 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/plugins/c9.ide.run.debug/debuggers/chrome/Debugger.js b/plugins/c9.ide.run.debug/debuggers/chrome/Debugger.js index 8b755d41..3288822d 100644 --- a/plugins/c9.ide.run.debug/debuggers/chrome/Debugger.js +++ b/plugins/c9.ide.run.debug/debuggers/chrome/Debugger.js @@ -78,7 +78,15 @@ function Debugger(options) { self.disconnect(); }); ws.on("message", function incoming(data) { + try { + var parsed = JSON.parse(data); + } catch (e) { + } // console.log("<<" + data); + // ignore for now since this is noisy, and is not used on the client + if (parsed && parsed.method == "Runtime.consoleAPICalled") + return; + broadcast(data); }); ws.on("error", function(e) { @@ -128,7 +136,7 @@ function Debugger(options) { if (this.ws) this.ws.close(); if (this.v8Socket) - this.v8Socket.close(); + this.v8Socket.destroy(); }; }).call(Debugger.prototype); diff --git a/plugins/c9.ide.run.debug/debuggers/chrome/DevtoolsProtocol.js b/plugins/c9.ide.run.debug/debuggers/chrome/DevtoolsProtocol.js index 56186ee4..3ad5dec4 100644 --- a/plugins/c9.ide.run.debug/debuggers/chrome/DevtoolsProtocol.js +++ b/plugins/c9.ide.run.debug/debuggers/chrome/DevtoolsProtocol.js @@ -50,7 +50,6 @@ var DevtoolsProtocol = module.exports = function(socket) { // TODO add support for threads break; case "Runtime.executionContextDestroyed": - console.log(message.params); this.detachDebugger(); break; case "Debugger.resumed": From 274f9773ba23fef913aec72f8dae56e2076c1dc3 Mon Sep 17 00:00:00 2001 From: nightwing Date: Sat, 24 Feb 2018 01:48:31 +0400 Subject: [PATCH 3/3] add option to replace old debug proxy --- .../debuggers/chrome/chrome-debug-proxy.js | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/plugins/c9.ide.run.debug/debuggers/chrome/chrome-debug-proxy.js b/plugins/c9.ide.run.debug/debuggers/chrome/chrome-debug-proxy.js index 367cf564..fe3cf45a 100644 --- a/plugins/c9.ide.run.debug/debuggers/chrome/chrome-debug-proxy.js +++ b/plugins/c9.ide.run.debug/debuggers/chrome/chrome-debug-proxy.js @@ -26,15 +26,25 @@ var socketPath = process.env.HOME + "/.c9/chrome.sock"; if (IS_WINDOWS) socketPath = "\\\\.\\pipe\\" + socketPath.replace(/\//g, "\\"); +var force = process.argv.indexOf("--force") != -1; console.log("Using socket", socketPath); function checkServer(id) { var client = net.connect(socketPath, function() { if (id) return; - console.log("process already exists"); - process.exit(0); + if (!force) { + console.log("process already exists"); + process.exit(0); + } + else { + console.log("trying to replace existing process"); + var strMsg = JSON.stringify({ $: "exit" }); + client.write(strMsg + "\0"); + } }); client.on("data", function(data) { + if (force) + return console.log("old pid" + data); try { var msg = JSON.parse(data.toString().slice(0, -1)); } catch (e) {} @@ -52,6 +62,13 @@ function checkServer(id) { process.exit(1); }); + + if (force) { + client.once("close", function() { + if (!server) + createServer(); + }); + } } var $id = 0;