gdb調試多線程多進程

多線程

一、info threads: 
  這條命令顯示的是當前可調試的全部線程,GDB會給每個線程都分配一個ID。前面有*的線程是當前正在調試的線程。 
二、thread ID: 
  切換到當前調試的線程爲指定爲ID的線程。 
三、thread apply all command: 
  讓全部被調試的線程都執行command命令 
四、thread apply ID1 ID2 … command: 
  這條命令是讓線程編號是ID1,ID2…等等的線程都執行command命令 
五、set scheduler-locking off|on|step: 
  在使用step或continue命令調試當前被調試線程的時候,其餘線程也是同時執行的,若是咱們只想要被調試的線程執行,而其餘線程中止等待,那就要鎖定要調試的線程,只讓它運行。 
  off:不鎖定任何線程,全部線程都執行。 
  on:只有當前被調試的線程會執行。 
  step:阻止其餘線程在當前線程單步調試的時候搶佔當前線程。只有當next、continue、util以及finish的時候,其餘線程纔會得到從新運行的。 
六、show scheduler-locking: 
  這條命令是爲了查看當前鎖定線程的模式。 
多線程

7.i threadsapp

  實現線程間切換spa

9.-g -rdynamic線程

  在生成調試信息的時候加入 -g -rdynamic選項,而後gdb啓動調試程序時,直接run,就能找出錯誤信息所在的地方調試

一個小提示:blog

在輸入gdb xx時,進入gdb命令,這時會輸出一些信息。如上所示,這些信息大多都是關於gdb的一些信息,能夠不讓他輸出,進程

如:gdb -q xxtable

這裏面a是我生成的調試信息的文件名。多進程

多進程

  默認設置下, 在調試多進程程序時 GDB 只會調試主進程. 可是 GDB > V7.0 支持多進程的分別以及同時調試, 換句話說, GDB 能夠同時調試多個程序. 只須要設置 follow-fork-mode (默認值 parent) 和 detach-on-fork (默認值 on )便可.thread

follow-fork-mode detach-on-fork 說明
parent on 只調試主進程(GDB默認)
child on 只調試子進程
parent off 同時調試兩個進程,gdb 跟主進程, 子進程 block 在 fork 位置
child off 同時調試兩個進程, gdb 跟子進程, 主進程 block 在 fork 位置
相關文章
相關標籤/搜索