如何增加Google Chrome开发者工具(或Firefox)中的调用堆栈条目数?

Ton*_*ich 41 javascript firebug google-chrome google-chrome-devtools

如何增加Google Chrome开发者工具(或Firefox Firebug)中的调用堆栈条目数?我在第三方控件的Javascript中收到Javascript错误."调用堆栈"窗口中的所有调用都不属于我自己的代码.我想知道我的代码中的哪一行触发了事件序列.调用堆栈不够大,无法显示我自己的代码.

Jas*_*onS 29

Chrome解决方案

https://github.com/v8/v8/wiki/Stack%20Trace%20API

可以在启动时通过命令行设置 --js-flags="--stack-trace-limit <value>"

或在运行时加载页面: Error.stackTraceLimit=undefined //unlimited stack trace

  • 如果你打开chrome dev控制台,你只需输入'''Error.stackTraceLimit'''它就会显示当前值.然后你可以随意修改它. (4认同)
  • 设置`Error.stackTraceLim it`不再起作用了. (4认同)
  • 例如`````Error.stackTraceLimit = 50``` (3认同)
  • 设置 `Error.stackTraceLim‌​it` 属性适用于 Chrome 60。在 Ubuntu 上运行。 (2认同)

Vla*_*scu 17

在Chrome中(也在节点中),您可以在js控制台中输入:

Error.stackTraceLimit = Infinity;
Run Code Online (Sandbox Code Playgroud)

或者,请参阅此页面了解Chrome命令行标记:https://github.com/v8/v8/wiki/Stack%20Trace%20API(需要重新启动Chrome):

$ google-chrome --js-flags="--stack-trace-limit 10000"
Run Code Online (Sandbox Code Playgroud)


use*_*621 -2

我认为调用堆栈大小没有限制*)。通常,似乎不知从何而来的堆栈跟踪是由以下任一原因造成的:

  • 事件监听器
  • 超时 ( window.setTimeout)
  • 区间 ( window.setInterval)
  • 页面加载后加载一些脚本(可能是 iframe)

*)当然,从技术上讲肯定存在一些限制,但我认为这实际上是无关紧要的。可能是longint之类的。


编辑:来自Firebug 源代码

    if (trace.frames.length > 100)  // TODO in the loop above
    {
        var originalLength = trace.frames.length;
        trace.frames.splice(50, originalLength - 100);
        var excuse = "(eliding "+(originalLength - 100)+" frames)";

        trace.frames[50] = new StackFrame.StackFrame({href: excuse}, 0, excuse,
            [], null, null, context);
     }
Run Code Online (Sandbox Code Playgroud)

因此 Firebug 将始终显示调用堆栈的前 50 个和最后 50 个项目(“帧”)。

  • 您错了。有最大堆栈大小,这非常重要。不适用于以异步方式编写的内容 - 但更多的是例如解释器。当我使用 Lisp 解释器时,我在 Chrome 中遇到了这个问题(最大堆栈大小比 Firefox 小得多)。大多数情况下,最后最好的办法是更改 JavaScript,使其异步运行(并通过“setTimeout”对处理进行切片)。也就是说,对于第三方脚本,我真的不知道如何解决它。 (6认同)