2

我使用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());
        }
    });
}

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

有没有更好的方法可以以更易读的方式捕获堆栈跟踪?

4

3 回答 3

0

try 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

于 2013-02-25T19:48:07.380 回答
0

Javascript 中的每个函数曾经都有一个 caller 属性,但由于安全限制,您不能再指望它了。

即使可以,对于匿名函数也无能为力,因为它们根本没有名字。您可以将字符串与堆栈跟踪一起使用并使其更漂亮:

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

    return stackTrace.replace(/\&[^;]+\;/, "");
}
于 2013-02-27T03:09:29.863 回答
0

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

所以在编码中,我们必须考虑如何创建函数以便让调试器捕获名称。

于 2013-02-27T18:16:10.037 回答