1. 編譯
-
首先,編輯好c++程序(以c++例),如test.cpp
-
然后,編譯
M-x compile
,把那一行命令改成g++ test.cpp -g -o test
,參數“-g”是為了加入調試信息。要不然后面的調試不成功。
2.進入gdb
-
直接
M-x gdb
-
顯示gdb –annotate=3 test回車就進入了調試模式。
-
界面如下:
不同的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 | 設置斷點。兩可以使用“行號”“函數名稱”“執行地址”等方式指定斷點位置。 |
b <行號> |
run | 開始調試程序 | r |
continue | 繼續執行被調試程序,直至下一個斷點或程序結束。 | c |
clear | 刪除特定行的斷點 | clear <行號> |
delete | 刪除斷點,編號從1開始 | d <編號> |
next line | 執行一行源程序代碼,此行代碼中的函數調用也一並執行。 | n |
step line | 執行一行源程序代碼,如果此行代碼中有函數調用,則進入該函數 | s |
until | 結束當前循環 | until |
可以檢查各個變量的值,數組的值,以及函數等 | 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