JavaScript中的异常日志记录,捕获堆栈跟踪

时间:2013-02-25 19:39:31

标签: javascript stack-trace exception-logging

我在发生异常时使用https://github.com/eriwen/javascript-stacktrace来捕获堆栈跟踪。

在某些情况下,记录的信息看起来很奇怪,例如用户使用IE9并且记录的消息是at {anonymous}()
 at printStackTrace()
 at {anonymous}(#object,"error","")
 at {anonymous}(#object,[#object...""])
 at d(12031,"",#object,"")
 at {anonymous}()

在我的代码中,我有一些jQuery事件处理代码

$(document).ready(function () {
    $('#reset').bind('click', reset);
}

function reset(e){
    $.ajax({
        type: 'POST',
        url: '/my/url',
        dataType: "json",
        success: function (result) {
            // do something useful
        },
        error: function (request, error) {
            // log to server side.
            logError(error, printStackTrace());
        }
    });
}

我认为在这种情况下,捕获的堆栈跟踪看起来就像是匿名对象。

我是否有更好的方式以更易读的方式捕获堆栈跟踪?

3 个答案:

答案 0 :(得分:0)

试试catch块怎么样? 看一下链接

<script>
var txt="";
function message()
{
try
  {
  adddlert("Welcome guest!");
  }
catch(err)
  {
  txt="There was an error on this page.\n\n";
  txt+="Error description: " + err.message + "\n\n";
  txt+="Click OK to continue.\n\n";
  alert(txt);
  }
}
</script>

http://www.w3schools.com/js/js_errors.asp

答案 1 :(得分:0)

Javascript中的每个函数都有一个调用者属性,但由于安全限制,你不能再依赖它了。

即使你可以,你也无法对匿名功能做些什么,因为他们根本就没有名字。你可以使用堆栈跟踪获取字符串并使其更漂亮:

function prettyTrace(stackTrace) {
    if (!stackTrace || stackTrace === "")
        return "";

    return stackTrace.replace(/\&[^;]+\;/, "");
}

答案 2 :(得分:0)

根据http://kangax.github.com/nfe/ function expressions is the only way to get a truly robust stack inspection,我认为我知道原因。

因此在编码中,我们必须考虑如何创建函数以允许调试器捕获名称。