最近尝试在Emacs里面调用gdb调试程序,使用了gdb-many-windows
这个特性,一个frame上开5个window(参见截图)。窗口多了切换便成了问题,很快就放弃使用C-x o,而用了鼠标。而来发现可以使用windmove,只要在.emacs
文件里面加上:
(windmove-default-keybindings)
然后就可以使用Shift加方向键来移动光标到不同窗口。然而,好多快捷键只有当光标在GUD interaction buffer时才有效,我就写了一个命令,并绑定在F9上,一键返回GUD interaction buffer所在的window。
(defun select-gud-interaction-window () (interactive) (if (and (boundp 'gud-comint-buffer) gud-comint-buffer (window-live-p (get-buffer-window gud-comint-buffer))) (select-window (get-buffer-window gud-comint-buffer)) (message "GUD interaction window is inactive"))) (define-key global-map [(f9)] 'select-gud-interaction-window)
更多emacs配置参见我的.emacs文件。
我绑定到f10的:
(setq preferred-debugger-alist
‘((c-mode . gdb)
(c++-mode .gdb)
(cperl-mode . perldb)
(jde-mode . jdb)
))
(defun humble-gud ()
“gdb if not already running, otherwise bring to front”
(interactive)
(require ‘gud)
(if (and (boundp ‘gud-comint-buffer) ;find running gdb process
gud-comint-buffer
(buffer-name gud-comint-buffer)
(get-buffer-process gud-comint-buffer))
(if (fboundp ‘gdb-restore-windows)
(gdb-restore-windows)
(pop-to-buffer gud-comint-buffer))
(call-interactively
(or (cdr (assq major-mode preferred-debugger-alist))
‘gdb))))
好像功能不大一样,呵呵。
你这个命令比较复杂,做了很多事情。
一直在用,不过公司的系统不知道为什么进入gdb需要很长时间。不过我从来没有你们这个需求,呵呵。