多線程
1、info threads:
這條命令顯示的是當前可調試的所有線程,GDB會給每一個線程都分配一個ID。前面有*的線程是當前正在調試的線程。
2、thread ID:
切換到當前調試的線程為指定為ID的線程。
3、thread apply all command:
讓所有被調試的線程都執行command命令
4、thread apply ID1 ID2 … command:
這條命令是讓線程編號是ID1,ID2…等等的線程都執行command命令
5、set scheduler-locking off|on|step:
在使用step或continue命令調試當前被調試線程的時候,其他線程也是同時執行的,如果我們只想要被調試的線程執行,而其他線程停止等待,那就要鎖定要調試的線程,只讓它運行。
off:不鎖定任何線程,所有線程都執行。
on:只有當前被調試的線程會執行。
step:阻止其他線程在當前線程單步調試的時候搶占當前線程。只有當next、continue、util以及finish的時候,其他線程才會獲得重新運行的。
6、show scheduler-locking:
這條命令是為了查看當前鎖定線程的模式。
7.i threads
實現線程間切換
9.-g -rdynamic
在生成調試信息的時候加入 -g -rdynamic選項,然后gdb啟動調試程序時,直接run,就能找出錯誤信息所在的地方
一個小提示:
在輸入gdb xx時,進入gdb命令,這時會輸出一些信息。如上所示,這些信息大多都是關於gdb的一些信息,可以不讓他輸出,
如:gdb -q xx
這里面a是我生成的調試信息的文件名。
多進程
默認設置下, 在調試多進程程序時 GDB 只會調試主進程. 但是 GDB > V7.0 支持多進程的分別以及同時調試, 換句話說, GDB 可以同時調試多個程序. 只需要設置 follow-fork-mode (默認值 parent) 和 detach-on-fork (默認值 on )即可.
follow-fork-mode | detach-on-fork | 說明 |
parent | on | 只調試主進程(GDB默認) |
child | on | 只調試子進程 |
parent | off | 同時調試兩個進程,gdb 跟主進程, 子進程 block 在 fork 位置 |
child | off | 同時調試兩個進程, gdb 跟子進程, 主進程 block 在 fork 位置 |