【 以下文字转载自 Google 讨论区 】
发信人: modico (modico), 信区: Google
标 题: gmail client code review,part 5
发信站: 水木社区 (Fri Oct 20 12:35:46 2006), 站内
关于得到调用栈:
google的实现在IE上是有隐患的,我认为在有直接或间接多次调用同一个函数时,
这样的代码会导致无限循环。比如a->b->a->c, 反朔回来,从c到a到b时,b.caller指向的是第二个a,而不是第一个a。
所以基本上,在IE上取调用栈的这种做法是危险的,除了调试器,没有办法安全地完整地看堆栈。
以下是google的实现:
function getStackTrace/*Gt*/(func)
{
try {
var b = "";
if (g_uaNotIE_KHtml/*BP*/) {
b = Error().stack + "\n\n";
}
if (func) {
var b = "- " + getFunctionName/*Gr*/(func) + "(";
var c = func.arguments;
for (var d = 0; d < c.length; d++) {
if (d > 0) {
b += ", ";
}
var e = c[d];
e = e && typeof e == "object" && e.toSource ? e.toSource() : String(e);
if (e.length > 40) {
e = e.substr(0, 40) + "...";
}
b += e;
}
b += ")\n" + getStackTrace/*Gt*/(func.caller);
}
return b;
}
catch (f) {
return "[Cannot get stack trace]: " + f + "\n";
}
}
--
FROM 218.249.84.*