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

完。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM