info b 會顯示所有線程的斷點,并不是隻顯示目前線程的。
info threads:顯示目前可調試的所有線程,每個線程會有一個GDB為其配置設定的ID。
136 Thread 7886 0x0000003f5220e4ed in ?? ()
135 Thread 22414 0x0000003f5220e054 in ?? () -------------- 第一列為ID。
* 3 Thread 7884 0x0000003f51ae14f3 in ?? ()--------- 星号表示這是“目前調試的線程”。
2 Thread 5261 0x0000003f51aacb8d in ?? ()
1 Thread 22216 0x0000003f51a328a5 in ?? ()
thread ID: 切換目前調試的線程為指定ID的線程。
如指令thread 2,表示切換到線程2。
thread apply all command: 讓所有被調試線程執行GDB指令command。
如指令thread apply all b main,表示所有線程都設定斷點。
執行info b得到如:145 breakpoint keep y 0x0000003f51aacb8d146 breakpoint keep y 0x0000003f51aacb8d147 breakpoint keep y 0x0000003f51aacb8d148 breakpoint keep y 0x0000003f51aacb8d149 breakpoint keep y 0x0000003f51aacb8d
command thread all:在所有線程中相應的行上設定斷點
如指令b main thread all。
執行info b得到如:154 breakpoint keep y <PENDING> main thread all ---------- 為啥和thread apply all command指令執行結果不同?
thread apply ID1 ID2 command: 讓一個或者多個線程執行GDB指令command。
set scheduler-locking off|on|step:在使用step或者continue指令調試目前被調試線程的時候,其他線程也是同時執行的,怎麼隻讓被調試程式執行呢?通過這個指令就可以實作這個需求。
- off 不鎖定任何線程,也就是所有線程都執行,這是預設值。
- on 隻有目前被調試程式會執行。
- step 在單步的時候,除了next過一個函數的情況(熟悉情況的人可能知道,這其實是一個設定斷點然後continue的行為)以外,隻有目前線程會執行。
GDBv7.0引入的non-stop模式,目前線程斷住,其他線程可以繼續執行。