Próbuję złapać ślad stosu danego node.js uncaughtException i działa dobrze dla różnych błędów, ale nie do zrzucenia() sprawozdania:Brakujące ślad stosu na node.js uncaughtException generowane przez rzut()
prawidłowe ślad stosu na obsługę wyjątków:
$ 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
$
Brakujące ślad stosu na wyjątek spowodowany przez rzut():
$ cat errorThrow.js
process.on('uncaughtException', function(exception) {
console.log('uncaughtException occurred: ' + exception.stack);
});
throw('my error');
$ node errorThrow.js
uncaughtException occurred: undefined
$
jakiś pomysł, dlaczego?
Dzięki Jose
Disclaimer: wiem, że za pomocą process.on („uncaughtException”) jest bardzo, bardzo złe i będę karane, ale przy użyciu domen nie jest opcją w tym kodzie.
Jeśli chcesz, abym wyjaśnił, jak i dlaczego jest to wykonywane na poziomie maszyny wirtualnej (w wersji 8), daj mi znać. Doszedłem do wniosku, że nie ma to znaczenia dla rozwiązania twojego problemu. –
Dzięki Benjamin za odpowiedź !. Czy wiesz, dlaczego zachowanie jest inne w Web Worker? Rzut; oświadczenie wewnątrz wywołania Web Worker (jeśli jest zarejestrowane) wywołania zwrotnego onerror zawierającego opis, lineno, colno, itp. – JoseOlcese
@JoseOlcese Tak, najprostszą odpowiedzią na to byłoby to, ponieważ tak zostały zaprojektowane. WebWorkers są częścią standardowego węzła sieciowego, który nie jest zgodny. To tylko WebWorkers są przydatne. Ogólnie rzecz biorąc, zawsze powinieneś wyrzucać obiekty błędu, a nie inne rzeczy, gdy zależy ci na debugowaniu (które zawsze powinno być z błędami). –