使用gdb進行程序調試1-在GDB中運行程序

/******************************************************************多線程

 * 本文爲博主學習《Debugging with GDB》的讀書筆記,版權全部,轉載請註明出處。函數

 *學習

 ******************************************************************/spa

在GDB中運行程序線程

1、啓動程序調試

若是在啓動gdb時沒有指明程序,可使用命令file或exec-file加載程序;rest

run(r):進程

  run(r)命令使程序啓動,能夠在run命令中指明程序參數;值得注意的是,首次運行run後,若是再次執行run而且不帶參數,會以以前的參數運行程序。rem

set args:it

  指定程序的參數。set args後,run能夠不帶參數而以指定的參數運行程序。若是set args不太參數,清楚程序參數,執行run後程序不太參數運行。

  在加載程序後,若是程序從新編譯gdb會根據符號文件的更改時間自動重載加載符號文件,因此,不須要從新加載文件

 start:

  使用start命令使程序停在main函數的第一條語句。

 

2、調試已經在運行的程序

attach pid:

  從ps得到進程號,經過attach命令鏈接到該進程。attach一個進程後,gdb首先stop該進程,這樣就能夠設置斷點,執行step、continue等命令;若是執行r命令,會殺掉原來的進程。

detach:

  釋放該進程,原進程會繼續執行。

 

3、調試多個inferiors和程序

  gdb容許在一個會話下調試多個程序,好比一個進程fork出兩個或者多個進程,或者把當前程序複製出一個副本,這些都是經過inferior實現控制。

info inferiors:

  顯示當前管理的inferiors。

inferior infono:

  切換到對應的inferior。

add-inferior [-copies n] [-exec executable]:

  添加n(默認爲1)個inferior,若是指明executable文件,能夠之後經過file加載符號文件。

clone-inferiror [-copies n] [infno]:

  複製編號爲infno(默認爲當前)的inferior。

其它相關命令:

  remove-inferiors infno

  detach inferior infno

  kill inferiors infno

  maint info program-spaces

 

4、調試fork

  默認狀況下,當一個程序fork,gdb會跟蹤父進程而子進程暢通無止的執行。若是在child中設置了一個斷點,執行到斷點處,child會收到一個SIGTRAP信號,默認爲終止程序。

  最開始調試child進程的方法是在child中設置一個sleep,而後經過attach連到child。

set follow-fork-mode mode

show follow-fork-mode:

  在Linux2.5.46之後,gdb支持fork函數的調試;經過set-follow-mode命令,設置跟隨parent仍是child,若是不設置默認爲跟隨parent。

set detach-on-fork mode

show detach-on-fork:

  在Linux,能夠經過set detach-on fork off命令,在fork後,對parent和child都進行調試。父、子進程爲多個inferiors,參見第三部分。

 

5、多線程調試

info threads:

  顯示線程信息。

thread thread-id

  切換到對應線程。

thread name [name]:

  修改當前thread的名稱。默認爲程序名稱。

 

6、Checkpoint

  在Linux,gdb支持保留程序在某個時候的快照,除了進程號和已經輸出的內容,全部狀態恢復到快照狀態。

  經過如下命令實現快照。

  checkpoing: 生成當前狀態的快照

  info checkpoint:顯示快照信息

  restart checkpoint-id:恢復到某個checkpoint

  delete checkpoint checkpoint-id:刪除某個checkpoint

 

 /******************************************************************

 * 本文爲博主學習Debugging with GDB的讀書筆記,版權全部,轉載請註明出處。

 *

 ******************************************************************/

相關文章
相關標籤/搜索