要调试高频定时器或传感器的值,配置一个每隔x次触发一次的断点将非常有用。什么是实现这一目标的最佳方式?如何设置每10次触发一次LLDB断点?
我在Xcode中尝试了“在停止之前忽略x次”选项,但这只适用于第一次。我可以使用LLDB命令重置此计数器吗?
要调试高频定时器或传感器的值,配置一个每隔x次触发一次的断点将非常有用。什么是实现这一目标的最佳方式?如何设置每10次触发一次LLDB断点?
我在Xcode中尝试了“在停止之前忽略x次”选项,但这只适用于第一次。我可以使用LLDB命令重置此计数器吗?
可以重置在任何时间计数器忽视:
(lldb) break modify -i <NEW_VALUE> <BKPT_SPECIFICATION>
请注意,断点w它不符合它的“忽略计数”不被认为是命中,所以它的断点命令不会运行。所以,如果你想阻止每第十你自动命中断点时,只是做:
(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
选项),因此我不必知道添加的断点命令中的断点编号。如果要将这些断点存储在命令文件等中,这很方便。
我不确定你可以在lldb中定义一个持久变量(counter)。您始终可以拥有一个全局变量,您可以将其用作计数器帮助器,并且不会将其包含在发布版本中。
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; }
如果您正在使用Xcode,则可以通过在Xcode的断点编辑器中添加“break modify”行作为断点命令来执行相同的操作。在这种情况下,你必须得到断点编号 - 因为Xcode还不支持命名断点。您可以在lldb控制台中发出“break list”命令。 –