diff --git a/packages/debugger-shell/src/node/index.flow.js b/packages/debugger-shell/src/node/index.flow.js index 7824db67a563a3..38d4ee6142b368 100644 --- a/packages/debugger-shell/src/node/index.flow.js +++ b/packages/debugger-shell/src/node/index.flow.js @@ -14,6 +14,7 @@ import { } from './private/LaunchUtils'; const {spawn} = require('cross-spawn'); +const debug = require('debug')('Metro:Debugger:DebuggerShell'); const path = require('path'); // The 'prebuilt' flavor will use the prebuilt shell binary (and the JavaScript embedded in it). @@ -55,17 +56,24 @@ async function unstable_spawnDebuggerShellWithArgs( ...env } = process.env; const child = spawn(binaryPath, [...baseArgs, ...args], { - stdio: 'inherit', + stdio: ['ignore', 'pipe', 'pipe'], windowsHide: true, detached: mode === 'detached', env, }); if (mode === 'detached') { child.on('spawn', () => { + debug('Debugger spawned in detached mode'); resolve(); }); - child.on('close', (code: number) => { + child.on('close', (code: number, signal) => { + debug('Debugger closed with code %s and signal %s', code, signal); if (code !== 0) { + console.error( + 'Debugger closed with code %s and signal %s', + code, + signal, + ); reject( new Error( `Failed to open debugger shell: exited with code ${code}`, @@ -73,11 +81,26 @@ async function unstable_spawnDebuggerShellWithArgs( ); } }); + child.on('error', error => { + debug('Debugger shell encountered error: %s', error); + reject(error); + }); + child.stdout.on('data', data => + console.debug('[DebuggerShell stdout] ' + String(data)), + ); + child.stderr.on('data', data => + console.debug('[DebuggerShell stderr] ' + String(data)), + ); child.unref(); } else if (mode === 'syncThenExit') { child.on('close', function (code, signal) { + debug('Debugger closed with code %s and signal %s', code, signal); if (code === null) { - console.error('Debugger shell exited with signal', signal); + console.error( + 'Debugger closed with code %s and signal %s', + code, + signal, + ); process.exit(1); } process.exit(code); @@ -85,6 +108,7 @@ async function unstable_spawnDebuggerShellWithArgs( const handleTerminationSignal = function (signal: string) { process.on(signal, function signalHandler() { + debug('The Signal %s received. killing debugger', signal); if (!child.killed) { child.kill(signal); }