【问题标题】:How to only stop at a breakpoint after some line was executed?如何仅在执行某些行后停在断点处?
【发布时间】:2016-10-30 22:11:27
【问题描述】:

通常,我想在调试时在特定行暂停,但只能在执行另一行之后。通常,这段 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() 后停止在这个函数上。该怎么做?

【问题讨论】:

    标签: javascript debugging google-chrome-devtools javascript-debugger


    【解决方案1】:

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

    【讨论】:

    • 是的,我也经常使用它,但我只能通过编辑源代码并重新加载页面来让它工作。当脚本易于更改时,这是最好的方法,但如果脚本是自动生成的,或者需要大量构建,则可能会很复杂。不幸的是,这在我的日常生活中很常见......
    • 顺便说一句,这是一个很好的问题:是否可以“即时”编辑代码以添加debugger 命令?
    • 我不确定,我猜是这样。但是在开发控制台中设置断点可能会更好。
    【解决方案2】:

    我们可以做到以下几点:

    1. f_b()添加断点。
    2. 使这个断点有条件。作为条件,将变量(假设为pause_at_f_a)设置为true。我们不想在f_b() 内暂停,所以我们使用逗号运算符返回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
      

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

    【讨论】:

    • 所以您在 1 分钟内回答了自己的问题?看起来很合理。
    • @RJM 哦,我明白了。不知道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    • 1970-01-01
    相关资源
    最近更新 更多