在nodejs中使用longjohn时错误的堆栈跟踪
我得到一个错误的stacktrace使用longjohn
与下面的代码。 它显示setTimeout
从第一个firstfunction
,但实际上程序在第一个函数执行之前崩溃。
我在这里创build了一张票https://github.com/mattinsler/longjohn/issues/16
var longjohn = require("longjohn"); setTimeout(function () { throw new Error(); }, 10); setTimeout(function () { firstfunction(); }, 10000); var firstfunction = function () { setTimeout(function () { console.log("First function"); }, 10); }
堆栈跟踪
/home/jeevan/node_js/node_modules/longjohn/dist/longjohn.js:181 throw e; ^ Error at firstfunction (/home/jeevan/node_js/longjohn.js:11:11) at listOnTimeout (timers.js:110:15) --------------------------------------------- at Object.<anonymous> (/home/jeevan/node_js/longjohn.js:10:1) at Module._compile (module.js:456:26) at Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32) at Module._load (module.js:312:12) at Module.runMain (module.js:497:10) at startup (node.js:119:16) at node.js:901:3
我的问题是什么可以是问题,如何解决它。
也没有longjohn
发生。
我不完全知道为什么,但如果你给你的callback命名,它会更好:
setTimeout(function MyFirstTimeoutCallback() { throw new Error(); }, 10); ...
这会生成以下回溯:
/private/tmp/node_modules/longjohn/dist/longjohn.js:181 throw e; ^ Error at MyFirstTimeoutCallback (/private/tmp/lj.js:4:9) <-- much better! at listOnTimeout (timers.js:110:15) --------------------------------------------- at Object.<anonymous> (/private/tmp/lj.js:3:1) at Module._compile (module.js:456:26) at Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32) at Module._load (module.js:312:12) at Module.runMain (module.js:497:10) at startup (node.js:119:16) at node.js:901:3
编辑:看起来像这个bug在节点0.10引入(某处)。 当我testing0.8.23时,它看起来没问题:
timers.js:103 if (!process.listeners('uncaughtException').length) throw e; ^ Error at Object.<anonymous> (/private/tmp/lj.js:4:9) <-- correct at list.ontimeout (timers.js:101:19) ...
( 错误报告 )
编辑#2:这是V8中的确认错误(请参阅链接的错误报告)。