要調試高頻定時器或傳感器的值,配置一個每隔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」命令。 –