Emacs 中 GDB 的使用

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)
    ))

完。

 

posted @ 2016-08-23 14:44  Anonymous596  阅读(3175)  评论(0编辑  收藏  举报