在递归代码中使用Javascript function.caller进行堆栈跟踪?

时间:2011-03-21 21:23:04

标签: javascript stack-trace

在javascript中,我可以使用foo.caller来获取对堆栈跟踪中foo上方函数的引用。但是,当函数在同一堆栈跟踪中多次出现时,这不起作用,foo.caller只返回foo。

是否有一种稳定的跨平台方法可以在Javascript中获得完整的堆栈跟踪?我想要获得可打印的堆栈跟踪;相反,我正在进行堆栈检查以查看某个方法是否位于堆栈中的任何位置。这是我目前的代码:

function inFunction(foo) {
    var caller = inFunction.caller;
    var maxDepth = 20;
    while(caller && --maxDepth > 0) {
        if(caller == foo)
            return true;
        caller = caller.caller;
    }
    return false;
}

如何处理堆栈跟踪中多次存在的函数?

1 个答案:

答案 0 :(得分:5)

抱歉,但没有。一旦你在跟踪中点击了递归函数,就无法进入调用函数。

我花了几天的时间尝试解决这个问题,同时为Sun Microsystems编写一个IDE IDE。没有。