Jam*_*ong 17 javascript error-handling eval
我正在异步构建包含javascripts的东西,这是有效的,但是我正在寻求改进错误检测(所以所有的错误似乎都不是来自AJAX调用附近的一些线路,它们将它们拉下来.
如果我使用eval来评估多行javascript文件,有没有办法跟踪哪一行发生错误?
通过在包含时保持对我需要的变量的引用,我没有问题确定错误发生在哪个文件中.我的问题是确定错误发生在哪一行.
例:
try {
eval("var valid_statement = 7; \n invalid_statement())))");
} catch(e) {
var err = new Error();
err.message = 'Error in Evald Script: ' + e.message;
err.lineNumber = ???
throw err;
}
Run Code Online (Sandbox Code Playgroud)
如何判断错误发生在第二行?具体来说,我有兴趣在Firefox中这样做.
我知道错误对象e.stack在Mozilla浏览器中有,但输出似乎没有正确考虑换行.
eval.所以像......
try {
eval('var valid_statement = 7; \n invalid_statement())))');
} catch(e) {
var err = e.constructor('Error in Evaled Script: ' + e.message);
// +3 because `err` has the line number of the `eval` line plus two.
err.lineNumber = e.lineNumber - err.lineNumber + 3;
throw err;
}
Run Code Online (Sandbox Code Playgroud)
全局错误事件侦听器将从eval捕获异常,并显示正确的行号(可能并非在所有浏览器中):
window.addEventListener('error', function(e) {
console.log(e.message
, '\n', e.filename, ':', e.lineno, (e.colno ? ':' + e.colno : '')
, e.error && e.error.stack ? '\n' : '', e.error ? e.error.stack : undefined
);
}, false);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9071 次 |
| 最近记录: |