EverET.org

好记性不如烂笔头

定制Emacs GDB调试窗口布局

| Comments

我们在Emacs中可以方便地使用GDB,具体操作在emacser.com有详细的快捷键的教程。不过我觉得其实GDB的CLI已经很好用了。

Emacs中默认可以方便打开多窗格模式,看起来就很像平时大家用的IDE了。

我们只需要M-x gdb-many-windows就可以打开多窗格了,默认布局如下图:

我们可以看到有6个窗格,其中有GDB命令行、局部变量、源代码、程序输出、栈、断点。功能看上去虽然很强大,不过我常用的只有其中几个,于是就决定开始定制Emacs的GDB调试窗口布局。

我常用的是代码框、输出、GDB命令行以及栈,什么断点、局部变量基本可以在需要的时候用i bi locals查看就可以了,没必要弄这么小一个窗格占住位置,而且想看的时候还看不完整。

定制

于是开始按照我的心意,将其定制成如下这样。

这样用起来比较爽,没有不需要的窗格。各位看官也可以根据自己的需要配置。

gdb-many-windows的窗口布局是写死在gdb-setup-windows这个函数里面,我们最好的方法就是defadvice这个函数。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
(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) 2) 3)))     ;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)
    ))

经过defadvice就可以修改原来定义的函数了,从而我们就可以定制UI了。

Emacs是伪装成编辑器的操作系统~~~

本文链接: http://everet.org/customize-emacs-gud-many-windows.html

您可能也喜欢

Comments