Emacs 提供了方便的 GDB 調試功能,使用方法簡明以下,shell
1. 編譯時加入調試信息, 例如: $ clang++ -g -Wall t.cpp -o twindows
2. 調試 t ,直接用命令 M-x gdb 打開 gdb 調試窗口,默認爲單一窗口,能夠使用命令 M-x gdb-many-windows 打開多窗格。數組
( gdb 會自動根據當前環境狀態,將 t 做爲默認調試文件, 不用像在 shell 窗口調試中那樣 $ gdb t )函數
3. 經常使用調試指令,ui
l (list): 從第一行開始列出源碼,默認10行。 spa
b (break): b <行號> , b <函數名>調試
r (run): 開始運行調試器,或從新開始運行調試器
code
c (continue): 繼續運行到下一個斷點,或運行到程序結束
get
clear : clear <行號> ,刪除特定行的斷點
源碼
d (delete): d <斷點編號>,刪除特定編號的斷點
n (next): 單步執行下一行,若是本行有函數調用,不進入函數
s (step): 單步執行下一行,若是本行有函數調用,進入函數
until: 結束當前循環
p (print): p <變量名>, 顯示變量內容
whatis: whatis<變量名>,顯示變量類型
info: info b, 顯示斷點信息。 info r 顯示寄存器信息。 info local 顯示當前函數中的局部變量信息。info prog 顯示被調試程序的執行狀態。
p *array@len : 打印一維數組
p **array@len : 打印二維數組
quit: 退出調試器。
4. emacs 默認的 gdb-many-windows 有6個調試窗口,有些不經常使用的,好比斷點信息窗等,再此將其簡化爲 4 個,將以下代碼加入到 emacs 配置文件便可,
;;;;======================================================== < for gdb >
;;;; set gdb multi-windows when open
(setq gdb-many-windows t)
;;;; customize the gdb multi-windows
(defadvice gdb-setup-windows (after my-setup-gdb-windows activate)
"my gdb UI"
(gdb-get-buffer-create 'gdb-stack-buffer)
(set-window-dedicated-p (selected-window) nil)
(switch-to-buffer gud-comint-buffer)
(delete-other-windows)
(let ((win0 (selected-window))
(win1 (split-window nil nil 'left)) ;; code and output
(win2 (split-window-below (/ (* (window-height) 3) 4))) ;; stack
)
(select-window win2)
(gdb-set-window-buffer (gdb-stack-buffer-name))
(select-window win1)
(set-window-buffer
win1
(if gud-last-last-frame
(gud-find-file (car gud-last-last-frame))
(if gdb-main-file
(gud-find-file gdb-main-file)
;; Put buffer list in window if we
;; can't find a source file.
(list-buffers-noselect))))
(setq gdb-source-window (selected-window))
(let ((win3 (split-window nil (/ (* (window-height) 3) 4)))) ;; io
(gdb-set-window-buffer (gdb-get-buffer-create 'gdb-inferior-io) nil win3))
(select-window win0)
))
完。