Emacs中學習gdb調試


1. 編譯

  • 首先,編輯好c++程序(以c++例),如test.cpp

  • 然后,編譯M-x compile,把那一行命令改成g++ test.cpp -g -o test,參數“-g”是為了加入調試信息。要不然后面的調試不成功

2.進入gdb

  • 直接M-x gdb

  • 顯示gdb –annotate=3 test回車就進入了調試模式。

  • 界面如下:

123_thumb[2]

不同的annotate 的值不代表不同的模式:

  • annotate = 0是最基本的模式和在命令行使用gdb完全一樣。

  • annotate = 1是單步調試模式,出現上下兩個窗口,上面是gdb運行的buffer,下面是你代碼的buffer,會在代碼 buffer中,同步指示當前運行的語句的位置。

  • annotate = 2是產生注解的模式。

  • annotate = 3是信息最完整的模式。此時的 Emacs 分5個 buffer,從上到下、從左到右依次是:gdb 調試窗口、變量實時變化顯示窗口、源代碼窗口、棧窗口、斷點信息

無論上面的那種情況,都出現了一個現象:程序的輸出不能顯示,只有在程序退出的時候才顯示出來。

gdb-many-windows 切換單窗格/多窗格模式

gdb-restore-windows 恢復窗格布局

3. 調試

常用的調試命令,可以簡寫

命令 意義 用法
list 從第一行開始列出源碼(默認10行)   l
  l 3 (開始行)
break

設置斷點。兩可以使用“行號”“函數名稱”“執行地址”等方式指定斷點位置。
其中在函數名稱前面加“*”符號表示將斷點設置在“由編譯器生成的prolog代碼處”。如果不了解匯編,可以不予理會此用法。

  b <行號>
  b <函數名稱>
  b *<函數名稱>
  b *<代碼地址>

run 開始調試程序   r
continue 繼續執行被調試程序,直至下一個斷點或程序結束。   c
clear 刪除特定行的斷點   clear <行號>
delete 刪除斷點,編號從1開始   d <編號>
next line 執行一行源程序代碼,此行代碼中的函數調用也一並執行。   n
step line 執行一行源程序代碼,如果此行代碼中有函數調用,則進入該函數   s
until 結束當前循環   until
print 可以檢查各個變量的值,數組的值,以及函數等 print p (p為變量名)
print $1 ($1為歷史記錄變量,在以后可以直接引用 $1 的值)
顯示數組: p <數組名>
顯示數組元素:p <*數組指針>
顯示數組int a[N]的特定值:
① p *a@10
② p (int [10])*10
whatis 可以顯示某個變量的類型 whatis p
info 用於顯示各類信息 如:info b 顯示斷點信息
info r 寄存器信息
info local 顯示當前函數中的局部變量信息
info prog 顯示被調試程序的執行狀態
quit 退出gdb調試 q

 

本文參考,特此聲明:

http://fanqiang.chinaunix.net/program/other/2006-07-14/4834.shtml

http://blog.csdn.net/liigo/article/details/582231

http://www.cnblogs.com/dodolook/archive/2011/05/31/2064363.html


免責聲明!

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



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