6

我有兴趣监视 javascript 错误并使用调用堆栈记录错误。

我对将所有内容都包装在 try-catch 块中不感兴趣。

根据这篇文章http://blog.errorception.com/2011/12/call-stacks-in-ie.html 可以在 window.onerror 内部“递归调用堆栈中的每个函数的 .caller 以了解前面的函数堆栈

我试图获取调用堆栈:

window.onerror = function(errorMsg, url, lineNumber)
{
    var stk = [], clr = arguments.callee.caller;
    while(clr)
    {
        stk.push("" + clr);
        clr = clr.caller;
    }
    // Logging stk
    send_callstack_to_log(stk);
}

但即使调用堆栈更长,也只有一步是可能的:

(function()
{
function inside() {it.will.be.exception;};
function middle() {inside()};
function outside() {middle()}
outside();
})();

一步并不有趣,因为 onerror 参数给了我更多关于它的信息。

是的,我根据我上面提到的文章用 IE 尝试过。

备注:我也尝试在“ERRORCAEPTION”上开设一个帐户以收集错误日志。我用 IE 对其进行了测试,“ERRORCAEPTION”识别出错误来自 IE,但我在日志中找不到任何调用堆栈信息。

4

4 回答 4

2

不幸的是,这个日志并不总是可用,它缺少行号,你不能真正依赖它。

试试https://qbaka.com

Qbaka 会自动重载一堆 JavaScript 函数,如addEventListener, setTimeout,XMLHtppRequest等,因此回调中发生的错误会自动用 try-catch 包装,您将无需任何代码修改即可获得堆栈跟踪。

于 2013-09-29T03:39:43.460 回答
1

您可以尝试提供 javascript 上下文错误跟踪的 atatus : https ://www.atatus.com/

于 2014-09-24T10:21:34.520 回答
1

看看这里: https ://github.com/eriwen/javascript-stacktrace

那是我在Muscula上使用的,一种类似于错误接收的服务,但它是免费的。

于 2013-03-18T06:03:55.623 回答
0

I have wrote a program to monitor js error. maybe it will help.

I used three kind of methods to catch exceptions, such as window.onerror, rewrite console.error and window.onunhandledrejection. So I can get Uncaught error, unhandled promise rejection and Custom error

Take a look here: https://github.com/a597873885/webfunny_monitor

or here: https:www.webfunny.cn

It will be help

于 2019-05-16T03:07:18.553 回答