【问题标题】:How can I setup an LLDB breakpoint firing every 10th time?如何设置每 10 次触发一次 LLDB 断点?
【发布时间】:2017-03-29 15:40:40
【问题描述】:

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

我在 Xcode 中尝试了“停止前忽略 x 次”选项,但这只适用于第一次。我可以使用 LLDB 命令重置此计数器吗?

【问题讨论】:

    标签: xcode breakpoints lldb


    【解决方案1】:

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

    class BrCounter{
         static var freq = 10
    } 
    

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

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

    Oneliner:

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

    【讨论】:

      【解决方案2】:

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

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

      注意,不满足其“忽略计数”的断点不会被视为命中,因此其断点命令不会运行。因此,如果您想在自动到达断点的十分之一时停止一次,只需执行以下操作:

          (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)
      

      然后在每次停止时点击“继续”,您将每 10 次点击一次断点。

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


      参考:Managing breakpoints 上的 Apple 文档。您也可以使用help breakpoint set 命令获取可用选项的完整列表

      【讨论】:

      • 如果您使用的是 Xcode,您可以通过在 Xcode 的断点编辑器中添加“break modify”行作为断点命令来执行相同的操作。在这种情况下,您必须获取断点编号——因为 Xcode 还不支持命名断点。您可以通过在 lldb 控制台中发出“break list”命令来找到它。
      猜你喜欢
      • 2021-05-27
      • 1970-01-01
      • 1970-01-01
      • 2011-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多