2016-11-15 46 views
3

要調試高頻定時器或傳感器的值,配置一個每隔x次觸發一次的斷點將非常有用。什麼是實現這一目標的最佳方式?如何設置每10次觸發一次LLDB斷點?

我在Xcode中嘗試了「在停止之前忽略x次」選項,但這隻適用於第一次。我可以使用LLDB命令重置此計數器嗎?

回答

1

可以重置在任何時間計數器忽視:

(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選項),因此我不必知道添加的斷點命令中的斷點編號。如果要將這些斷​​點存儲在命令文件等中,這很方便。

+1

如果您正在使用Xcode,則可以通過在Xcode的斷點編輯器中添加「break modify」行作爲斷點命令來執行相同的操作。在這種情況下,你必須得到斷點編號 - 因爲Xcode還不支持命名斷點。您可以在lldb控制檯中發出「break list」命令。 –

0

我不確定你可以在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; }