From 56b136f88243f56fdd7f999a979a5e1cb1f6bd85 Mon Sep 17 00:00:00 2001 From: Kohei Ueno Date: Sun, 22 May 2022 22:09:14 +0900 Subject: [PATCH] debugger: throw a more useful error when the frame is missing PR-URL: https://github.com/nodejs/node/pull/42776 Fixes: https://github.com/nodejs/node/issues/42775 Reviewed-By: Antoine du Hamel Reviewed-By: James M Snell --- lib/internal/debugger/inspect_repl.js | 3 +++ test/sequential/test-debugger-list.js | 30 +++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 test/sequential/test-debugger-list.js diff --git a/lib/internal/debugger/inspect_repl.js b/lib/internal/debugger/inspect_repl.js index a2d83da4388bcf..742a7d64705043 100644 --- a/lib/internal/debugger/inspect_repl.js +++ b/lib/internal/debugger/inspect_repl.js @@ -681,6 +681,9 @@ function createRepl(inspector) { // List source code function list(delta = 5) { + if (!selectedFrame) { + throw new ERR_DEBUGGER_ERROR('Requires execution to be paused'); + } return selectedFrame.list(delta).then(null, (error) => { print("You can't list source code right now"); throw error; diff --git a/test/sequential/test-debugger-list.js b/test/sequential/test-debugger-list.js new file mode 100644 index 00000000000000..594874e140b306 --- /dev/null +++ b/test/sequential/test-debugger-list.js @@ -0,0 +1,30 @@ +'use strict'; +const common = require('../common'); + +common.skipIfInspectorDisabled(); + +const fixtures = require('../common/fixtures'); +const startCLI = require('../common/debugger'); + +const assert = require('assert'); + +const cli = startCLI([fixtures.path('debugger/three-lines.js')]); + +(async () => { + await cli.waitForInitialBreak(); + await cli.waitForPrompt(); + await cli.command('list(0)'); + assert.match(cli.output, /> 1 let x = 1;/); + await cli.command('list(1)'); + assert.match(cli.output, /> 1 let x = 1;\r?\n {2}2 x = x \+ 1;/); + await cli.command('list(10)'); + assert.match(cli.output, /> 1 let x = 1;\r?\n {2}2 x = x \+ 1;\r?\n {2}3 module\.exports = x;\r?\n {2}4 /); + await cli.command('c'); + await cli.waitFor(/disconnect/); + await cli.waitFor(/debug> $/); + await cli.command('list()'); + await cli.waitFor(/ERR_DEBUGGER_ERROR/); + assert.match(cli.output, /Uncaught Error \[ERR_DEBUGGER_ERROR\]: Requires execution to be paused/); +})() +.finally(() => cli.quit()) +.then(common.mustCall());