Emacs 提供了方便的 GDB 调试功能,使用方法简明如下,
1. 编译时加入调试信息, 例如: $ clang++ -g -Wall t.cpp -o t
2. 调试 t ,直接用命令 M-x gdb 打开 gdb 调试窗口,默认为单一窗口,可以使用命令 M-x gdb-many-windows 打开多窗格。
( gdb 会自动根据当前环境状态,将 t 作为默认调试文件, 不用像在 shell 窗口调试中那样 $ gdb t )
3. 常用调试指令,
l (list): 从第一行开始列出源码,默认10行。
b (break): b <行号> , b <函数名>
r (run): 开始运行调试器,或重新开始运行调试器
c (continue): 继续运行到下一个断点,或运行到程序结束
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)
))
完。