mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
33bbf3751b
When V8 creates a context for snapshot building, it does not install Error.stackTraceLimit. As a result, error.stack would be undefined in the snapshot builder script unless users explicitly initialize Error.stackTraceLimit, which may be surprising. This patch initializes Error.stackTraceLimit based on the value of --stack-trace-limit to prevent the surprise. If users have modified Error.stackTraceLimit in the builder script, the modified value would be restored during deserialization. Otherwise, the fixed up limit would be deleted since V8 expects to find it unset and re-initialize it during snapshot deserialization. PR-URL: https://github.com/nodejs/node/pull/55121 Fixes: https://github.com/nodejs/node/issues/55100 Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
47 lines
1.2 KiB
JavaScript
47 lines
1.2 KiB
JavaScript
'use strict';
|
|
|
|
// This tests Error.stackTraceLimit is fixed up for snapshot-building contexts,
|
|
// and can be restored after deserialization.
|
|
|
|
require('../common');
|
|
const assert = require('assert');
|
|
const tmpdir = require('../common/tmpdir');
|
|
const fixtures = require('../common/fixtures');
|
|
const { spawnSyncAndAssert } = require('../common/child_process');
|
|
|
|
tmpdir.refresh();
|
|
const blobPath = tmpdir.resolve('snapshot.blob');
|
|
{
|
|
spawnSyncAndAssert(process.execPath, [
|
|
'--stack-trace-limit=50',
|
|
'--snapshot-blob',
|
|
blobPath,
|
|
'--build-snapshot',
|
|
fixtures.path('snapshot', 'error-stack.js'),
|
|
], {
|
|
cwd: tmpdir.path
|
|
}, {
|
|
stdout(output) {
|
|
assert.match(output, /During snapshot building, Error\.stackTraceLimit = 50/);
|
|
const matches = [...output.matchAll(/at recurse/g)];
|
|
assert.strictEqual(matches.length, 30);
|
|
}
|
|
});
|
|
}
|
|
|
|
{
|
|
spawnSyncAndAssert(process.execPath, [
|
|
'--stack-trace-limit=20',
|
|
'--snapshot-blob',
|
|
blobPath,
|
|
], {
|
|
cwd: tmpdir.path
|
|
}, {
|
|
stdout(output) {
|
|
assert.match(output, /After snapshot deserialization, Error\.stackTraceLimit = 20/);
|
|
const matches = [...output.matchAll(/at recurse/g)];
|
|
assert.strictEqual(matches.length, 20);
|
|
}
|
|
});
|
|
}
|