Emacs 中 GDB 的使用

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

完。

相關文章
相關標籤/搜索