获取错误对象相对于源URL的Chrome堆栈跟踪



使用Chrome时,我通过Mocha测试运行程序收到一个错误,该错误是作为afterEachthis.currentTest.err的一部分捕获的。

我正在用browserify编译coffeescript,并使用很棒的coffeify插件进行调试。这将生成一个带有sourceMappingURL=data:...的已编译文件bundle.js,它允许我直接查看和调试原始的coffee脚本。

不幸的是,当我在afterEach Mocha钩子中访问err.stack时,堆栈包含对bundle.js的引用,而不是相应的.coffee文件,这将更加有用。

下面是一些带有browserfy的示例代码。

首先,安装它(为了方便)与npm:

$ npm install -g browserify; npm install coffeeify

x.coffee

try
  throw Error("Thrown.")
catch err
  console.log err.stack

使用转换为x.js

$ browserify -t coffeeify x.coffee -d > x.js

x.html

<html>
 <head>
   <script src='x.js'></script>
 </head>
 <body></body>
</html>

如果在Chrome中打开它,开发工具将显示x.jsx.coffee(来自sourceMapURL)和x.html

当我们运行这个HTML页面时,我们会得到console的以下输出:

错误:抛出。出现错误()在对象处。(file://localhost/Users/bmh/tmp/x.js:5:9)在i(file://localhost/Users/bmh/tmp/x.js:1:219)犯错(file://localhost/Users/bmh/x.js:1:382)在file://localhost/Users/bmh/tmp/x.js:1:400

我们期望的是让跟踪引用.coffee文件,看起来像这样(我在这里为说明目的而编造):

错误:抛出。出现错误()在对象处。(file://localhost/Users/bmh/tmp/x.coffee:2:5)

是否有人成功地将错误堆栈转换为引用其源映射位置的项的错误堆栈?

我不确定coffeify,但源地图支持模块为与browserify捆绑的代码添加了.stack支持。只需npm install source-map-support,并将require('source-map-support').install()放在代码的顶部。

相关内容

最新更新