跟踪并记录所有调用tree/graph的javascript函数?

跟踪并记录所有调用tree/graph的javascript函数?,javascript,debugging,web,Javascript,Debugging,Web,是否可以在任何web调试器中将所有javascript函数调用视为一棵树 更新 我的意思是,调试器可以记住每个函数调用,从中调用其他函数,还可以记住每个调用的堆栈帧和整个DOM快照 更新2 以下页面代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Trace and log all javascript functions calling tree/graph

是否可以在任何web调试器中将所有javascript函数调用视为一棵树

更新

我的意思是,调试器可以记住每个函数调用,从中调用其他函数,还可以记住每个调用的堆栈帧和整个DOM快照

更新2

以下页面代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Trace and log all javascript functions calling tree/graph?</title>

<script type="text/javascript">

    function init() {

        setDiv2("This div text was changed once");
        setDiv2("This div text was changed twice");

    };

    function setDiv2(text) {
        document.getElementById("div2").innerHTML = text;
    }

    window.onload = init;

</script>

</head>
<body>

    <h1>Trace and log all javascript functions calling tree/graph?</h1>

    <p><a href="http://stackoverflow.com/questions/20910262/trace-and-log-all-javascript-functions-calling-tree-graph">Stack Overflow Question #20910262</a></p>

    <div id="div1">This div will not changed</div>

    <div id="div2">This div text will change</div>

    <div>

    <h2>The call graph should be follows</h2>



    </div>

</body>
</html>

跟踪并记录所有调用tree/graph的javascript函数?
函数init(){
setDiv2(“此div文本已更改一次”);
setDiv2(“此div文本更改了两次”);
};
函数setDiv2(文本){
document.getElementById(“div2”).innerHTML=text;
}
window.onload=init;
跟踪并记录所有调用tree/graph的javascript函数?

此分区不会更改 此div文本将更改 调用图如下所示
应该给出以下调用图

因为函数调用了两次

在探查器的自顶向下视图中,它显示为

其中
setDiv2()
函数只绘制一次。这有助于分析,但这不是调用图

因此,问题依然存在

更新3


此外,用户应该能够在每个树节点上查看所有变量的值和当前整个DOM树的状态,这些都由节点表示。

当然可以。每个浏览器都支持调试javascript代码。您需要在使用的特定浏览器中阅读。例如,您可以通过单击Ctrl+Shift+K在Mozilla Firefox中打开开发人员工具。在Internet Explorer中,您需要单击F12键。对于Google Chrome Ctrl+Shift+I,在打开工具后,需要设置断点,在断点处可以看到堆栈跟踪、局部变量等。设置断点后需要重新加载网页,因为当页面加载时,所有js都是第一次执行的,加载后可以捕获,或者为catch断点创建一些事件。

显然,您需要的是一个自定义分析器。Chrome JS profiler是一个非常方便的工具。但我认为这不是适合你的工具。另外,Firebug或Safari profiler(webkits)也不能帮你完成这项工作。因此,您需要开发自己的自定义分析器。因为其他人只对CPU时间分析或内存使用情况分析或CSS选择器感兴趣/有针对性

您可以修改
Object.prototype.constructor
。因此,您定义的所有全局函数都可以使用特殊的profile方法。或者通过
Function.prototype.bind()
借用方法,您可以将执行过程中需要的所有数据填充到一个特殊的数据对象中。这可能类似于树层次结构。以下是启动自定义探查器的位置

让我们知道您是否可以完成javascript的自定义探查器。这将是包括我在内的更多人真正有用的工具

在setDiv2函数中尝试console.trace(),在这种情况下,您将在chrome控制台中看到这两个树调用

     <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Trace and log all javascript functions calling tree/graph?</title>

    <script type="text/javascript">

        function init() {

            setDiv2("This div text was changed once");
            setDiv2("This div text was changed twice");

        };

        function setDiv2(text) {
            document.getElementById("div2").innerHTML = text;
            console.trace()
        }

        window.onload = init;

    </script>

</head>
.....

跟踪并记录所有调用tree/graph的javascript函数?
函数init(){
setDiv2(“此div文本已更改一次”);
setDiv2(“此div文本更改了两次”);
};
函数setDiv2(文本){
document.getElementById(“div2”).innerHTML=text;
console.trace()
}
window.onload=init;
.....

请检查Google Chrome开发工具的功能console@JanDvorak我看不到我正在寻找的功能。请检查CPU探查器,specifically@JanDvorakCPU探查器看起来不像我想要的那样。可能我弄错了,但那个里的调用看起来像是按消耗的时间排序,按函数分组(在分析器中应该是这样的)。我需要整个调用图,其中调用按执行顺序排序,每个函数都表示其被调用的次数。有三个视图:自顶向下(函数及其调用者)、自下而上(函数及其调用者)或火焰图(每个函数调用由放置在调用方上的矩形表示,长度表示时间).自上而下的视图不是你想要的吗?我在两个浏览器中都没有看到。所有javascript调试都需要设置断点。我看不出有什么理由这样做,因为网页不是一个程序,它并不总是执行。我不知道在哪里设置断点,我也不想知道。我需要从一开始到现在跟踪所有DOM修改结束。是的,页面不是一个程序。但页面有链接或嵌入脚本,加载后执行。我发现firefox的扩展可能会有帮助。你也需要firebug。所以每次执行都应该被捕获和记录。我无法访问代码。我需要第三方页面的通用解决方案。