这是一篇非常古老的文章,但是下面的解决方案可以帮助某人。
follow代码捕获gdb接口的开始和退出,更改其行为。
在gdb start(defadvice gdb)时,它首先保存当前布局,然后运行gdb,最后准备一个新的自定义布局(很容易根据您的喜好对其进行编辑)。
在gdb exit(defadvice gdb reset)时,它首先执行原始的exit函数,然后重新加载保存的布局。
结果包含gdb的同一窗口多个窗口,当前运行的线程位于图像的右上角
(setq gdb many windows nil)
(defun set gdb layout(&可选c-buffer)
(如果(不是C缓冲器)
(setq c-buffer(窗口缓冲区(所选窗口));;保存当前缓冲区
;来自http://stackoverflow.com/q/39762833/846686
(set-window-indicate-p(selected window)nil);;如果需要,取消设置专用状态
(切换到缓冲器Gud Comint Buffer)
(删除其他窗口);;全部清除
(让*)
(w-source(选定窗口));;左上角
(w-gdb(拆分窗口w-source nil'right));右下角
(w-locals(拆分窗口w-gdb nil'以上));右中底
(w-stack(split window w w-locals nil'above));右中上
(W-断点(上面的拆分窗口w-stack nil”);右上角
(W-IO(分窗W源(地板(*0.9(窗体高度)))
'下方');;左下
)
(设置窗口缓冲区w-io(gdb get buffer create'gdb subior io))。
(设置-窗口-专用-P W-IO T)
(设置窗口缓冲区w-断点(gdb get buffer create'gdb断点缓冲区))
(设置-窗口-专用-P W-断点T)
(设置窗口缓冲区w-locals(gdb get buffer create'gdb locals buffer))。
(设置-窗口-专用-P W-局部变量T)
(设置窗口缓冲区w-stack(gdb get buffer create'gdb stack buffer))。
(设置-窗口-专用-P W-堆栈T)
(设置窗口缓冲区w-gdb gud comint buffer)
(选择窗口w-source)
(设置窗口缓冲区w-源c-缓冲区)
)
(defadvice gdb(args附近激活)
“更改GDB的工作方式。”
(setq全局配置编辑(当前窗口配置));要恢复:(设置窗口配置C-编辑)
(让(
(C缓冲区(窗口缓冲区(选定窗口));;保存当前缓冲区
)
做广告
(设置gdb布局c-buffer)
)
(默认GDB重置(args激活周围)
“更改到gdb出口的方式。”
做广告
(设置窗口配置全局配置编辑)
< /代码>
它的行为。
在gdb start(defadvice gdb)时,它首先保存当前布局,然后运行gdb,最后准备一个新的自定义布局(很容易根据您的喜好对其进行编辑)。
在gdb exit(defadvice gdb reset)时,它首先执行原始的exit函数,然后重新加载保存的布局。
结果包含gdb的同一窗口多个窗口,当前运行的线程位于图像的右上角

(setq gdb-many-windows nil)
(defun set-gdb-layout(&optional c-buffer)
(if (not c-buffer)
(setq c-buffer (window-buffer (selected-window)))) ;; save current buffer
;; from http://stackoverflow.com/q/39762833/846686
(set-window-dedicated-p (selected-window) nil) ;; unset dedicate state if needed
(switch-to-buffer gud-comint-buffer)
(delete-other-windows) ;; clean all
(let* (
(w-source (selected-window)) ;; left top
(w-gdb (split-window w-source nil 'right)) ;; right bottom
(w-locals (split-window w-gdb nil 'above)) ;; right middle bottom
(w-stack (split-window w-locals nil 'above)) ;; right middle top
(w-breakpoints (split-window w-stack nil 'above)) ;; right top
(w-io (split-window w-source (floor(* 0.9 (window-body-height)))
'below)) ;; left bottom
)
(set-window-buffer w-io (gdb-get-buffer-create 'gdb-inferior-io))
(set-window-dedicated-p w-io t)
(set-window-buffer w-breakpoints (gdb-get-buffer-create 'gdb-breakpoints-buffer))
(set-window-dedicated-p w-breakpoints t)
(set-window-buffer w-locals (gdb-get-buffer-create 'gdb-locals-buffer))
(set-window-dedicated-p w-locals t)
(set-window-buffer w-stack (gdb-get-buffer-create 'gdb-stack-buffer))
(set-window-dedicated-p w-stack t)
(set-window-buffer w-gdb gud-comint-buffer)
(select-window w-source)
(set-window-buffer w-source c-buffer)
))
(defadvice gdb (around args activate)
"Change the way to gdb works."
(setq global-config-editing (current-window-configuration)) ;; to restore: (set-window-configuration c-editing)
(let (
(c-buffer (window-buffer (selected-window))) ;; save current buffer
)
ad-do-it
(set-gdb-layout c-buffer))
)
(defadvice gdb-reset (around args activate)
"Change the way to gdb exit."
ad-do-it
(set-window-configuration global-config-editing))