如何设置每 10 次触发一次 LLDB 断点?

How can I setup an LLDB breakpoint firing every 10th time?

要调试高频计时器或传感器的值,配置一个仅每 x 次触发的断点会很有用。实现此目标的最佳方法是什么?

我尝试了 Xcode 中的 "Ignore x times before stopping" 选项,但这只是第一次有效。我可以使用 LLDB 命令重置此计数器吗?

我不确定您是否可以在 lldb 中定义持久变量(计数器)。您始终可以拥有一个用作计数器助手的全局变量,而只是不将其包含在发布版本中。

class BrCounter{
     static var freq = 10
} 

编辑断点并添加以下条件:

BrCounter.freq--; 
if(BrCounter.freq == 0){ 
    BrCounter.freq = 10; 
    return true; 
}else{ 
    return false; 
}

一线:

BrCounter.freq--; if(BrCounter.freq == 0){ BrCounter.freq = 10; return true; }else{ return false; }

您可以随时重置忽略计数器:

(lldb) break modify -i <NEW_VALUE> <BKPT_SPECIFICATION>

注意,不满足其 "ignore count" 的断点不被视为命中,因此其断点命令不会得到 运行。所以如果你想在你自动命中断点的时候每十分之一停止一次,只需要这样做:

    (lldb) break set -l 10 -i 10 -N my_bkpt
    Breakpoint 1: where = foo`main + 46 at foo.c:10, address = 0x0000000100000f5e
    (lldb) break com add
    Enter your debugger command(s).  Type 'DONE' to end.
    > break modify -i 10 my_bkpt 
    > DONE
    (lldb)

然后在每次停止时点击"continue",每10次就会遇到一次断点。

请注意,我使用了命名断点的功能(-N 选项),因此我不必知道我添加的断点命令中的断点编号。如果你打算将这些断点存储在命令文件等中,那将很方便


参考:Managing breakpoints 上的 Apple 文档。您还可以执行 help breakpoint set 命令以获得可用选项的完整列表