debugging 条件断点取决于Chrome开发工具中的其他断点

weylhg0b  于 2023-02-13  发布在  其他
关注(0)|答案(1)|浏览(114)

只有当代码首先在另一个断点停止时,我才需要在断点停止。
示例:

for(let i=0; i<5; i++){

   someFunction();           // put conditional breakpoint here with i==3
   
}

function someFunction(){

   // put another breakpoint here, but this should be executed only for i==3 
   // we don't have i here for the condition, so it should be executed only if prev breakpoint was executed

}

Chrome开发工具可以实现这一点吗?

pdtvr36n

pdtvr36n1#

实际上,在创建条件断点时可以编写任意代码。可以编写整个代码块(使用shift-enter来编写多行代码),如果你愿意,使用任何你想要的JS。任何const/let/var声明只能在这个代码块的作用域中访问。使用全局变量来传递数据到其他条件断点,或者任何你想在DevTools控制台手动运行的代码。如果你不想在这个断点停止,只要使用false作为你代码的最后一个表达式。
在您的情况下,为someFunction()行设置条件断点:_i = i, false_i = i; false;(在本例中,_iwindow._i相同),只需确保使用足够唯一的名称,以避免与您的其他代码或您使用的第三方库冲突。
在函数内部,设置一个以_i == 3为条件的条件断点。
正如我所发现的,您可以使用条件断点完成各种各样的巧妙技巧:

  • 在全局变量中保存对某个类示例的引用,然后在控制台上引用它以检查其属性或调用其方法
  • 修改范围内的任何变量
  • 添加一些日志记录(DevTools对此也有一个"logpoint"类型的断点,当您编辑断点时,它位于下拉列表中)

另一个注意事项:如果你在条件断点中使用的代码有任何语法错误,那么整个代码块将不会被执行,断点也不会被触发。因此,如果你的条件断点代码看起来不起作用,检查它是否有错误--例如,在那里设置一个常规断点,触发它,然后在控制台中执行您试图在条件断点中使用的代码,看看它有什么问题。

相关问题