inspector: fix crash on exception
Fixes: https://github.com/nodejs/node/issues/13438 PR-URL: https://github.com/nodejs/node/pull/13455 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Refael Ackermann <refack@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Timothy Gu <timothygu99@gmail.com>
This commit is contained in:
parent
8208fdae2b
commit
9991e27ac8
@ -371,7 +371,9 @@ void CallAndPauseOnStart(
|
|||||||
v8::MaybeLocal<v8::Value> retval =
|
v8::MaybeLocal<v8::Value> retval =
|
||||||
args[0].As<v8::Function>()->Call(env->context(), args[1],
|
args[0].As<v8::Function>()->Call(env->context(), args[1],
|
||||||
call_args.size(), call_args.data());
|
call_args.size(), call_args.data());
|
||||||
args.GetReturnValue().Set(retval.ToLocalChecked());
|
if (!retval.IsEmpty()) {
|
||||||
|
args.GetReturnValue().Set(retval.ToLocalChecked());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Used in NodeInspectorClient::currentTimeMS() below.
|
// Used in NodeInspectorClient::currentTimeMS() below.
|
||||||
|
64
test/inspector/test-inspector-exception.js
Normal file
64
test/inspector/test-inspector-exception.js
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
'use strict';
|
||||||
|
const common = require('../common');
|
||||||
|
|
||||||
|
common.skipIfInspectorDisabled();
|
||||||
|
|
||||||
|
const assert = require('assert');
|
||||||
|
const helper = require('./inspector-helper.js');
|
||||||
|
const path = require('path');
|
||||||
|
|
||||||
|
const script = path.join(common.fixturesDir, 'throws_error.js');
|
||||||
|
|
||||||
|
|
||||||
|
function setupExpectBreakOnLine(line, url, session) {
|
||||||
|
return function(message) {
|
||||||
|
if ('Debugger.paused' === message['method']) {
|
||||||
|
const callFrame = message['params']['callFrames'][0];
|
||||||
|
const location = callFrame['location'];
|
||||||
|
assert.strictEqual(url, session.scriptUrlForId(location['scriptId']));
|
||||||
|
assert.strictEqual(line, location['lineNumber']);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function testBreakpointOnStart(session) {
|
||||||
|
const commands = [
|
||||||
|
{ 'method': 'Runtime.enable' },
|
||||||
|
{ 'method': 'Debugger.enable' },
|
||||||
|
{ 'method': 'Debugger.setPauseOnExceptions',
|
||||||
|
'params': {'state': 'none'} },
|
||||||
|
{ 'method': 'Debugger.setAsyncCallStackDepth',
|
||||||
|
'params': {'maxDepth': 0} },
|
||||||
|
{ 'method': 'Profiler.enable' },
|
||||||
|
{ 'method': 'Profiler.setSamplingInterval',
|
||||||
|
'params': {'interval': 100} },
|
||||||
|
{ 'method': 'Debugger.setBlackboxPatterns',
|
||||||
|
'params': {'patterns': []} },
|
||||||
|
{ 'method': 'Runtime.runIfWaitingForDebugger' }
|
||||||
|
];
|
||||||
|
|
||||||
|
session
|
||||||
|
.sendInspectorCommands(commands)
|
||||||
|
.expectMessages(setupExpectBreakOnLine(0, script, session));
|
||||||
|
}
|
||||||
|
|
||||||
|
function testWaitsForFrontendDisconnect(session, harness) {
|
||||||
|
console.log('[test]', 'Verify node waits for the frontend to disconnect');
|
||||||
|
session.sendInspectorCommands({ 'method': 'Debugger.resume'})
|
||||||
|
.expectStderrOutput('Waiting for the debugger to disconnect...')
|
||||||
|
.disconnect(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
function runTests(harness) {
|
||||||
|
harness
|
||||||
|
.runFrontendSession([
|
||||||
|
testBreakpointOnStart,
|
||||||
|
testWaitsForFrontendDisconnect
|
||||||
|
]).expectShutDown(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
helper.startNodeForInspectorTest(runTests,
|
||||||
|
undefined,
|
||||||
|
undefined,
|
||||||
|
script);
|
Loading…
x
Reference in New Issue
Block a user