我在发生异常时使用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());
}
});
}
我认为在这种情况下,捕获的堆栈跟踪看起来就像是匿名对象。
我是否有更好的方式以更易读的方式捕获堆栈跟踪?
答案 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>
答案 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
,我认为我知道原因。
因此在编码中,我们必须考虑如何创建函数以允许调试器捕获名称。