gdb調試多線程多進程


多線程

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 位置


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM