一:列出文件清單    
  1.   List    
  (gdb)   list   line1,line2    
    
  二:執行程序    
  要想運行準備調試的程序,可使用run命令,在它後面可以跟隨發給該程序的任何參數,包括標準輸入和標準輸出説明符(<和>)和外殼通配符(*、?、[、])在內。    
  如果你使用不帶參數的run命令,gdb就再次使用你給予前一條run命令的參數,這是很有用的。    
  利用set   args   命令就可以修改發送給程序的參數,而使用show   args   命令就可以查看其缺省參數的列表。    
  (gdb)set   args   –b   –x    
  (gdb)   show   args    
  backtrace命令為堆棧提供向後跟蹤功能。    
  Backtrace   命令產生一張列表,包含着從最近的過程開始的所以有效過程和調用這些過程的參數。    
    
  三:顯示數據    
  利用print   命令可以檢查各個變量的值。    
  (gdb)   print   p   (p為變量名)    
  whatis   命令可以顯示某個變量的類型    
  (gdb)   whatis   p    
  type   =   int   *    
    
  print   是gdb的一個功能很強的命令,利用它可以顯示被調試的語言中任何有效的表達式。表達式除了包含你程序中的變量外,還可以包含以下內容:    
  l   對程序中函數的調用    
  (gdb)   print   find_entry(1,0)    
  l   數據結構和其他複雜對象    
  (gdb)   print   *table_start    
  $8={e=reference=’/000’,location=0x0,next=0x0}    
  l   值的歷史成分    
  (gdb)print   $1   ($1為歷史記錄變量,在以後可以直接引用   $1   的值)    
  l   人為數組    
  人為數組提供了一種去顯示存儲器塊(數組節或動態分配的存儲區)內容的方法。早期的調試程序沒有很好的方法將任意的指針換成一個數組。就像對待參數一樣,讓我們查看內存中在變量h後面的10個整數,一個動態數組的語法如下所示:    
  base@length    
  因此,要想顯示在h後面的10個元素,可以使用h@10:    
  (gdb)print   h@10    
  $13=(-1,345,23,-234,0,0,0,98,345,10)    
    
  四:斷點(breakpoint)    
  break命令(可以簡寫為b)可以用來在調試的程序中設置斷點,該命令有如下四種形式:    
  l   break   line-number   使程序恰好在執行給定行之前停止。    
  l   break   function-name   使程序恰好在進入指定的函數之前停止。    
  l   break   line-or-function   if   condition   如果condition(條件)是真,程序到達指定行或函數時停止。    
  l   break   routine-name   在指定例程的入口處設置斷點    
    
  如果該程序是由很多原文件構成的,你可以在各個原文件中設置斷點,而不是在當前的原文件中設置斷點,其方法如下:    
  (gdb)   break   filename:line-number    
  (gdb)   break   filename:function-name    
    
  要想設置一個條件斷點,可以利用break   if命令,如下所示:    
  (gdb)   break   line-or-function   if   expr    
  例:    
  (gdb)   break   46   if   testsize==100    
    
  從斷點繼續運行:countinue   命令    
  五.斷點的管理    
    
  1.   顯示當前gdb的斷點信息:    
  (gdb)   info   break    
  他會以如下的形式顯示所有的斷點信息:    
  Num   Type   Disp   Enb   Address   What    
  1   breakpoint   keep   y   0x000028bc   in   init_random   at   qsort2.c:155    
  2   breakpoint   keep   y   0x0000291c   in   init_organ   at   qsort2.c:168    
  (gdb)    
  2.刪除指定的某個斷點:    
  (gdb)   delete   breakpoint   1    
  該命令將會刪除編號為1的斷點,如果不帶編號參數,將刪除所有的斷點    
  (gdb)   delete   breakpoint    
  3.禁止使用某個斷點    
  (gdb)   disable   breakpoint   1    
  該命令將禁止斷點   1,同時斷點信息的   (Enb)域將變為   n    
  4.允許使用某個斷點    
  (gdb)   enable   breakpoint   1    
  該命令將允許斷點   1,同時斷點信息的   (Enb)域將變為   y    
  5.清除原文件中某一代碼行上的所有斷點    
  (gdb)clean   number    
  注:number   為原文件的某個代碼行的行號    
  六.變量的檢查和賦值    
     whatis:識別數組或變量的類型    
     ptype:比whatis的功能更強,他可以提供一個結構的定義    
     set   variable:將值賦予變量    
     print   除了顯示一個變量的值外,還可以用來賦值
七.單步執行    
     next    
  不進入的單步執行    
     step    
  進入的單步執行    
  如果已經進入了某函數,而想退出該函數返回到它的調用函數中,可使用命令finish    
  八.函數的調用    
    call   name   調用和執行一個函數    
  (gdb)   call   gen_and_sork(   1234,1,0   )    
  (gdb)   call   printf(“abcd”)    
  $1=4    
    finish   結束執行當前函數,顯示其返回值(如果有的話)    
    
  九.機器語言工具    
  有一組專用的gdb變量可以用來檢查和修改計算機的通用寄存器,gdb提供了目前每一台計算機中實際使用的4個寄存器的標準名字:    
     $pc   :   程序計數器    
     $fp   :   幀指針(當前堆棧幀)    
     $sp   :   棧指針    
     $ps   :   處理器狀態    
    
  十.信號    
  gdb通常可以捕捉到發送給它的大多數信號,通過捕捉信號,它就可決定對於正在運行的進程要做些什麼工作。例如,按CTRL-C將中斷信號發送給gdb,通常就會終止gdb。但是你或許不想中斷gdb,真正的目的是要中斷gdb正在運行的程序,因此,gdb要抓住該信號並停止它正在運行的程序,這樣就可以執行某些調試操作。    
    
  Handle命令可控制信號的處理,他有兩個參數,一個是信號名,另一個是接受到信號時該作什麼。幾種可能的參數是:    
     nostop   接收到信號時,不要將它發送給程序,也不要停止程序。    
     stop   接受到信號時停止程序的執行,從而允許程序調試;顯示一條表示已接受到信號的消息(禁止使用消息除外)    
     print   接受到信號時顯示一條消息    
     noprint   接受到信號時不要顯示消息(而且隱含着不停止程序運行)    
     pass   將信號發送給程序,從而允許你的程序去處理它、停止運行或採取別的動作。    
  l   nopass   停止程序運行,但不要將信號發送給程序。    
  例如,假定你截獲SIGPIPE信號,以防止正在調試的程序接受到該信號,而且只要該信號一到達,就要求該程序停止,並通知你。要完成這一任務,可利用如下命令:    
  (gdb)   handle   SIGPIPE   stop   print    
  請注意,UNIX的信號名總是採用大寫字母!你可以用信號編號替代信號名    
  如果你的程序要執行任何信號處理操作,就需要能夠測試其信號處理程序,為此,就需要一種能將信號發送給程序的簡便方法,這就是signal命令的任務。該   命令的參數是一個數字或者一個名字,如SIGINT。假定你的程序已將一個專用的SIGINT(鍵盤輸入,或CTRL-C;信號2)信號處理程序設置成採   取某個清理動作,要想測試該信號處理程序,你可以設置一個斷點並使用如下命令:    
  (gdb)   signal   2    
  continuing   with   signal   SIGINT(2)    
  該程序繼續執行,但是立即傳輸該信號,而且處理程序開始運行.    
    
  十一.   原文件的搜索    
  search   text:該命令可顯示在當前文件中包含text串的下一行。    
  Reverse-search   text:該命令可以顯示包含text   的前一行。    
    
  十二.UNIX接口    
  shell   命令可啓動UNIX外殼,CTRL-D退出外殼,返回到   gdb.    
    
  十三.命令的歷史    
  為了允許使用歷史命令,可使用   set   history   expansion   on   命令    
  (gdb)   set   history   expansion   on    
    
  小結:常用的gdb命令    
  backtrace   顯示程序中的當前位置和表示如何到達當前位置的棧跟蹤(同義詞:where)    
  breakpoint   在程序中設置一個斷點    
  cd   改變當前工作目錄    
  clear   刪除剛才停止處的斷點    
  commands   命中斷點時,列出將要執行的命令    
  continue   從斷點開始繼續執行    
  delete   刪除一個斷點或監測點;也可與其他命令一起使用    
  display   程序停止時顯示變量和表達時    
  down   下移棧幀,使得另一個函數成為當前函數    
  frame   選擇下一條continue命令的幀    
  info   顯示與該程序有關的各種信息    
  jump   在源程序中的另一點開始運行    
  kill   異常終止在gdb   控制下運行的程序    
  list   列出相應於正在執行的程序的原文件內容    
  next   執行下一個源程序行,從而執行其整體中的一個函數    
  print   顯示變量或表達式的值    
  pwd   顯示當前工作目錄    
  pype   顯示一個數據結構(如一個結構或C++類)的內容    
  quit   退出gdb    
  reverse-search   在源文件中反向搜索正規表達式    
  run   執行該程序    
  search   在源文件中搜索正規表達式    
  set   variable   給變量賦值    
  signal   將一個信號發送到正在運行的進程    
  step   執行下一個源程序行,必要時進入下一個函數    
  undisplay   display命令的反命令,不要顯示錶達式    
  until   結束當前循環    
  up   上移棧幀,使另一函數成為當前函數    
  watch   在程序中設置一個監測點(即數據斷點)    
  whatis   顯示變量或函數類型