【问题标题】:How to break on currently running JavaScript如何中断当前运行的 JavaScript
【发布时间】:2014-11-14 20:09:36
【问题描述】:

我有一个 HTML 页面,其中包含一些被黑的脚本,其中包含类似的东西,例如

setTimeout(function () {
    window.location = window.location;
}, 3000);

但是假设这个页面使用了大量缩小的 JS 并且跨越多个文件,使用 Chrome/Firefox 开发者工具,如何从多个文件中发现上述代码部分?即停止执行并在当前运行的行上中断?

【问题讨论】:

  • “spot(ting) 上面的代码段”和“停止执行并在当前运行的行上中断”是完全不同的东西。你想要哪个?

标签: javascript debugging google-chrome-devtools firefox-developer-tools


【解决方案1】:

“spot(ting) 上面这段代码”“stop(ping) 在当前运行的行上执行和中断” 是完全不同的东西。

spot(ting) 上面这段代码

要在各种源文件中的任意位置查找代码,您可以使用 Chrome 的开发工具的全局搜索功能:

  1. 打开开发工具(F12、Ctrl+Shift+I 或通过菜单)

  2. 切换到源窗格

  3. 按 Ctrl+Shift+F(在 Mac 上可能是 Cmd+Shift+F)

  4. 输入您要查找的内容

停止(ping)当前运行行的执行和中断

  1. 打开开发工具(F12、Ctrl+Shift+I 或通过菜单)

  2. 切换到源窗格

  3. 点击暂停按钮(看起来像两条竖线)

开发工具应该在尝试运行的下一段 JavaScript 上中断(根据 this page on developer.chrome.com)。

【讨论】:

    【解决方案2】:

    如果代码很大并且您不知道,一种选择是使用 Profiler。

    Chrome 开发工具中有一个“配置文件”标签,Firefox 开发工具中有一个“性能”标签。 这些工具中的每一个的行为都非常相似,因为您开始录制,然后等待(或在页面上执行您知道会导致脚本运行的任何操作),然后停止录制。

    中间的面板将显示在该时间段内运行的所有脚本的调用树,其中的列应该可以告诉您更多关于花费时间的信息。 使用该调用树,您可以深入了解确切执行的内容,然后从那里跳转到脚本中的实际行。

    这里是the chrome devtools profiler documentation page,这里是the firefox devtools counterpart

    使用 firefox devtools 的另一个选项是跟踪器。跟踪器是一种记录在 javascript 级别发生的所有事情的工具:调用了哪些函数、传递了哪些参数、返回了哪些值、这些函数又调用了哪些函数……

    检查一下:

    • 在 Firefox 中打开 about:config,然后将 pref "devtools.debugger.tracer" 切换为 true。
    • 然后打开 devtools 并切换到调试器面板。
    • 然后点击双箭头图标,在暂停/跳过/步入/退出按钮旁边。
    • 这将启动跟踪并将侧栏切换到“跟踪”面板。
    • 再次点击结束录制。

    您应该看到执行的跟踪。如果您单击跟踪中的任何条目,您将看到相关的脚本,并在边栏中看到参数和返回值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多