Ich versuche, die Stack-Trace eines node.js uncaughtException zu fangen und es für verschiedene Fehler funktioniert gut, aber nicht für throw() Angaben:Fehlende Stack-Trace auf node.js uncaughtException von throw() erzeugt
korrekte Stack-Trace auf die Ausnahmebehandlung:
$ cat errorFunc.js
process.on('uncaughtException', function(exception) {
console.log('uncaughtException occurred: ' + exception.stack);
});
MyError();
$ node errorFunc.js
uncaughtException occurred: ReferenceError: MyError is not defined
at Object.<anonymous> (/home/jolcese/code/WebEnclaves/Server/errorFunc.js:5:1)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:901:3
$
Fehlende Stack-Trace auf Ausnahme von Wurf verursacht():
$ cat errorThrow.js
process.on('uncaughtException', function(exception) {
console.log('uncaughtException occurred: ' + exception.stack);
});
throw('my error');
$ node errorThrow.js
uncaughtException occurred: undefined
$
Jede Idee, warum?
Dank Jose
Haftungsausschluss: Ich weiß, dass process.on mit (‚uncaughtException‘) ist ein sehr, sehr schlechte Sache, und ich werde aber Domains verwendet werden bestraft ist in diesem Code keine Option.
Wenn Sie möchten, dass ich näher erläutere, wie und warum dies auf der Ebene der virtuellen Maschine (in v8) geschieht, lassen Sie es mich wissen. Ich dachte mir, dass das für die Lösung Ihres Problems nicht relevant ist. –
Danke Benjamin für die Antwort !. Weißt du, warum das Verhalten in einem Web Worker anders ist? Ein Wurf; Anweisung in einem Web Worker-Aufruf (falls registriert) der Onerror-Callback mit Beschreibung, Lineno, Colno, etc. – JoseOlcese
@JoseOlcese Ja, die einfachste Antwort wäre, dass das so ist, weil sie so entworfen wurden. WebWorker sind ein Teil des Web-Standard-Knotens, an den sich der Web-Standard nicht hält. Es sind nur WebWorker, die nützlich sind. Im Allgemeinen sollten Sie immer Fehlerobjekte und keine anderen Dinge werfen, wenn Sie sich um das Debuggen kümmern (was immer mit Fehlern behaftet sein sollte). –