如何在执行某行后仅在断点处停止?

How to only stop at a breakpoint after some line was executed?

经常,我想在调试时停在特定的行,但只有在执行了另一行之后。通常,这个 JavaScript 代码是机器生成的(例如,由 JSP 或 PHP),或者应该构建(例如,由 Grunt),这可能有点烦人时间我想添加一个断点。在这种情况下如何在特定行停止?

例如,我有两个函数 f_a()f_b() 是这样调用的:

for (var i = 0; i < 1000; i++) {
  f_a();
}

f_b();
f_a();

(Running example)

我想在f_a()里面加一个断点,但是在调用f_b()之后才停在这个函数。怎么做?

我们可以做到以下几点:

  1. 添加断点到 f_b()
  2. 使这个断点成为条件。作为条件,将一个变量(比方说,pause_at_f_a)设置为true。我们不想在 f_b() 里面暂停,所以我们使用逗号运算符 return false。那么条件就是

    pause_at_f_a = true, false
    

  3. f_a()添加一个断点。这个断点的条件应该是paused_at_f_a变量。

一个可能的烦恼是,在我们检查了我们想要检查的任何内容之后,断点将保持启用状态。这就是我使用另一个步骤的原因:

  1. 与其仅仅检查变量是否为 true,如果为真则取消设置,使用以下条件:

    pause_at_f_a ? (pause_at_f_a = false, true) : false
    

条件可以是任何东西。也可以使用计数器。技巧的核心是使用断点来设置变量。这是结果:

您也可以在您的代码中写入 debugger;,浏览器开发工具将在该代码行停止。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/debugger