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 =
|
||||
args[0].As<v8::Function>()->Call(env->context(), args[1],
|
||||
call_args.size(), call_args.data());
|
||||
args.GetReturnValue().Set(retval.ToLocalChecked());
|
||||
if (!retval.IsEmpty()) {
|
||||
args.GetReturnValue().Set(retval.ToLocalChecked());
|
||||
}
|
||||
}
|
||||
|
||||
// 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