2013-02-25 102 views
1

我使用https://github.com/eriwen/javascript-stacktrace来捕获异常发生时的堆栈跟踪。JavaScript中的异常日志记录,捕获堆栈跟踪

在某些情况下,记录的信息看起来很奇怪,例如用户使用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()); 
     } 
    }); 
} 

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

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

回答

0

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

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

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

0

Javascript中每个功能以前有一个caller属性,但是由于安全限制,你不能在它了算。

即使可以,对于匿名函数也没什么可做的,因为它们根本没有名字。你可以采取与堆栈跟踪字符串,并使其成为一个更漂亮一点:

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

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