Sen*_*lez 11 javascript error-handling runtime-error
这可能是一个奇怪的问题,我似乎无法搜索正确的短语来提取任何相关的答案.
我们有一个在客户端计算机上运行的应用程序并且已缩小.我们生成源映射,但它们不会暴露给生产版本.
我有一个window.onerror
,我使用一个捕获所有的草率代码,发现它是我不知道的方式.值得庆幸的是,这几乎从未被利用过.最近,我undefined
偶尔会遇到一个错误,所以有人找到了办法做某些不合意的事情.Chrome可以很好地记录堆栈跟踪中的行号和列号,当错误捕获其中一个错误时,我们会记录到日志记录服务器,但是我需要调试并查看min文件并不是很吸引人.而且undefined is not a function
是不是非常有帮助要么:)
问题:是否有一个工具 - 可能在nodejs中 - 可以采用min文件,源映射和堆栈跟踪字符串并生成相关文件,行号和列号?
我意识到浏览器在运行时为你做了这个,但是在这种情况下,我没有那么奢侈,因为我试图弄清楚事后的错误究竟是什么.
发现这个:https://github.com/thlorenz/stack-mapper
我使用uglify似乎产生了这个需要的正确映射,看起来它适用于我上面建议的情况.
编辑 实际上,这个工作得更好,使用https://github.com/mozilla/source-map/更简单.
用法示例:
var fs = require('fs');
var smc = require('source-map');
var stack = "TypeError: undefined is not a function\r\nat h/min/min.js?1404839824760:9:23048";
stack = stack.split(/\r\n/g);
var error = stack.shift(); // First line is the actual error
var errors = [];
var file = null;
stack.forEach(function(line){
var _trace = line.split('/').pop();
var trace = {};
trace.filename = _trace.split('?').shift();
_trace = _trace.split(':');
trace.line = parseInt(_trace[1], 10);
trace.column = parseInt(_trace[2], 10);
errors.push(trace);
if(!file)
file = trace.filename.split('.').shift();
trace.filename = __dirname + '/../min/' + trace.filename;
});
// This does not account for multiple files in stack trace right now
var map = fs.readFileSync(__dirname + '/../src/' + file + '.js.map');
map = JSON.parse(map);
var sm = new smc.SourceMapConsumer(map);
console.log(sm.originalPositionFor(errors[0]));
Run Code Online (Sandbox Code Playgroud)