рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рд╕реЗ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрдиреЗ рдкрд░ vm2 "рд╕рд╣реА" рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХреЗред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ:
/home/user/box-js/node_modules/vm2/lib/main.js:213
throw this._internal.Decontextify.value(e);
^
Error: foobar
at Object.log (/home/user/box-js/analyze.js:248:10)
at Object.apply (/home/user/box-js/node_modules/vm2/lib/contextify.js:288:34)
at vm.js:491:9
at ContextifyScript.Script.runInContext (vm.js:53:29)
at VM.run (/home/user/box-js/node_modules/vm2/lib/main.js:207:72)
at Object.<anonymous> (/home/user/box-js/analyze.js:383:5)
at Module._compile (module.js:569:30)
at Object.Module._extensions..js (module.js:580:10)
at Module.load (module.js:503:32)
at tryModuleLoad (module.js:466:12)
рдХреНрдпрд╛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХреЛ рдлреЗрдВрдХрдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реА рд░реЗрдЦрд╛ (рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХреЛрдб рдореЗрдВ) рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рдереА?
рдпрд╣ рдХрдорд╛рд▓ рд╣реЛрдЧрд╛ред рдореИрдВ рдЕрднреА рдПрдХ рдХреЛрдбрд┐рдВрдЧ рдЧрд▓рддреА рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рд▓рд╛рдЗрди рдирдВрдмрд░ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдХрдард┐рди рд╕рдордп рдмрд┐рддрд╛ рд░рд╣рд╛ рд╣реВрдВ
рдпрджрд┐ рдЖрдк рдРрд╕реЗ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЗ рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рддреНрд░реБрдЯрд┐ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ vm2 рдХреЛ рджреЗрд╢реА vm рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдореБрдЭреЗ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рднреА рдЪрд╛рд╣рд┐рдПред рдЕрдЧрд░ рдХреЛрдИ рдореБрдЭреЗ рд╕рд╣реА рджрд┐рд╢рд╛ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рддреЛ рдЗрд╕реЗ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╣рд╛рд▓ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИред рдЖрдЧреЗ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдкрдХреЗ рдпреЛрдЧрджрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╡реАрдПрдо 2 рдХреЛ рдореВрд▓ рд╡реАрдПрдо рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЫреЛрдЯрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдкреАрдЖрдИ рдЕрд╕рдВрдЧрддрддрд╛рдПрдВ рд╣реИрдВ, рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЦреБрд▓рд╛ рд░рд╣ рд╕рдХрддрд╛ рд╣реИ!
@patriksimek , рдореИрдВрдиреЗ рдПрдХ рдЕрдкрд╡рд╛рдж рдкрд╛рд░реНрд╕рд░/
const StackTracey = require ('stacktracey');
const { VM } = require('vm2');
const sourceCode = `function f() {
throw Exception('e');
}
f();`;
const scriptName = "hello_world.js";
process.on("uncaughtException", e => {
if (!e.stack.includes("/node_modules/vm2/")) {
// This is not a vm2 error, so print it normally
console.log(e);
return;
}
const oldStack = new StackTracey(e);
const newStack = [];
for (const line of oldStack) {
// Discard internal code
if (line.file.includes("/cjs"))
continue;
if (line.thirdParty && line.file.includes("/node_modules/vm2/"))
continue;
if (line.callee == "Script.runInContext")
continue;
// Replace the default filename with the user-provided one
if (line.fileName == "vm.js")
line.fileRelative = line.fileShort = line.fileName = scriptName;
newStack.push(line);
}
console.log("[vm2] A clean stack trace follows:");
console.log(new StackTracey(newStack).pretty);
});
const vm = new VM();
vm.run(sourceCode, scriptName);
рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдкреНрд░рд┐рдВрдЯ рд╣реЛрдЧрд╛:
ReferenceError: Exception is not defined
at f (vm.js:2:2)
at vm.js:4:1
at Script.runInContext (vm.js:135:20)
at VM.run (/tmp/vm2-test/node_modules/vm2/lib/main.js:210:72)
at Object.<anonymous> (/tmp/vm2-test/index.js:33:4)
at Module._compile (internal/modules/cjs/loader.js:805:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:816:10)
at Module.load (internal/modules/cjs/loader.js:672:32)
at tryModuleLoad (internal/modules/cjs/loader.js:612:12)
at Function.Module._load (internal/modules/cjs/loader.js:604:3)
[vm2] A clean stack trace follows:
at f hello_world.js:2
at hello_world.js:4
at <anonymous> index.js:33 vm.run(sourceCode, scriptName);
рдореБрдЭреЗ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдореМрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ vm рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдПрдХ рдирдпрд╛ vm.Script рдмрдирд╛рддреЗ рд╕рдордп рдЙрдкрдпреБрдХреНрдд рд▓рд╛рдЗрди рдСрдлрд╝рд╕реЗрдЯ рд╕реЗрдЯ рдХрд░рдХреЗ рд╕рдЯреАрдХ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдирдВрдмрд░ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рд╣реИред
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╣рд╛рд▓ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИред рдЖрдЧреЗ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдкрдХреЗ рдпреЛрдЧрджрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рд▓рдЧрд╛ рдХрд┐ рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░реВрдВрдЧрд╛ + рд╕реБрдЭрд╛рд╡ рдЕрднреА рднреА рдореЗрд░реЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИрдВ!
рдореЗрд░реЗ рд▓рд┐рдП рднреА рдмрд╣реБрдд рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред
@patriksimek @CapacitorSet рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпрд╛ рдХреБрдЫ рдФрд░ рдЙрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛?
рдзрдиреНрдпрд╡рд╛рджред
рдкреИрдЯреНрд░рд┐рдХ, рдХреНрдпрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реНрдХреЗрдЪ рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдареАрдХ рджрд┐рдЦрддрд╛ рд╣реИ? рдЕрдЧрд░ рдРрд╕рд╛ рд╣реИ рддреЛ рдореИрдВ рдкреАрдЖрд░ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рд╣рдо рд╡рд╣рд╛рдВ рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
@CapacitorSet рд╣рд╛рдВ, рдореБрдЭреЗ рдкреАрдЖрд░ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред рдХреБрдЫ рдиреЛрдЯ:
vm.run
рд╡рд┐рдзрд┐ рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ - рдЗрд╕рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╛рдо рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ VMScript рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реБрдзрд╛рд░рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИредрдЗрд╕ рдореБрджреНрджреЗ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЫреЛрдбрд╝рдХрд░ - рдореИрдВрдиреЗ рдПрдХ рдкреАрдЖрд░ рдЦреЛрд▓рд╛, рддрд╛рдХрд┐ рдЖрдк рд╡рд╣рд╛рдВ рдкреНрд░рдЧрддрд┐ рдХреЛ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХреЗрдВред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЗрд╕ рдореБрджреНрджреЗ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЫреЛрдбрд╝рдХрд░ - рдореИрдВрдиреЗ рдПрдХ рдкреАрдЖрд░ рдЦреЛрд▓рд╛, рддрд╛рдХрд┐ рдЖрдк рд╡рд╣рд╛рдВ рдкреНрд░рдЧрддрд┐ рдХреЛ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХреЗрдВред