[emacs] [настройка gdb] Как отобразить исходный буфер в одном окне?
Я настроил окна GDB в Emacs. После этого во время отладки новый исходный код открывается в разных окнах. Я хотел бы видеть исходный код только в одном окне. Моя настройка GDB:
; _____________________________________________________________________________________
; | | |
; | BREAKPOINTS | |
; |__________________________________________| |
; | | |
; | STACK | |
; |__________________________________________| |
; | | |
; | | |
; | LOCALS | |
; | | SOURCE CODE |
; |__________________________________________| |
; | | |
; | | |
; | | |
; | | |
; | | |
; | | |
; | GDB | |
; | |__________________________________________|
; | | |
; | | |
; | | I/O |
; | | |
; |__________________________________________|__________________________________________|
(require 'gud)
; invoke
(global-set-key [f8] 'gdb)
; GDB layout
(defadvice gdb-setup-windows (after activate)
(gdb-setup-my-windows)
)
(defun gdb-setup-my-windows ()
(set-window-dedicated-p (selected-window) nil)
(switch-to-buffer gud-comint-buffer)
(delete-other-windows)
(let
((win0 (selected-window)) ; breakpoints
(win1 (split-window-horizontally
(floor (* 0.5 (window-width))))) ; source + i/o
(win2 (split-window-vertically
(floor (* 0.5 (window-body-height))))) ; gdb
(win3 (split-window-vertically
(floor (* 0.5 (window-body-height))))) ; locals
(win4 (split-window-vertically
(floor (* 0.6 (window-body-height))))) ; stack
)
(select-window win1)
; configurating right window
(let
((winSrc (selected-window)) ; source
(winIO (split-window-vertically (floor (* 0.9 (window-body-height))))) ; I/O
)
(set-window-buffer winIO (gdb-get-buffer-create 'gdb-inferior-io))
(set-window-buffer
winSrc
(if gud-last-last-frame
(gud-find-file (car gud-last-last-frame))
(if gdb-main-file
(gud-find-file gdb-main-file)
(list-buffers-noselect))))
(setq gdb-source-window winSrc)
(set-window-dedicated-p winIO t)
)
(set-window-buffer win0 (gdb-get-buffer-create 'gdb-breakpoints-buffer))
(set-window-buffer win3 (gdb-get-buffer-create 'gdb-locals-buffer))
(set-window-buffer win4 (gdb-get-buffer-create 'gdb-stack-buffer))
(select-window win2)
)
)
; GDB variables
(setq gdb-many-windows t)
(setq gdb-show-main t)
(setq gdb-show-changed-values t)
(setq gdb-use-colon-colon-notation t)
(setq gdb-use-separate-io-buffer nil)
(setq gdb-delete-out-of-scope t)
(setq gdb-speedbar-auto-raise t)
Главный экран:GDB экран после запуска
Но когда я начал отладку, следующий исходный файл открывается в другом окне. Смотрите пример ниже:Новый исходный код в окне GDB
Пример приложения для воспроизведения:
main.cpp
#include "classB.h"
int main()
{
B *b = 0;
b = new B();
return 0;
}
classA.h
#ifndef CLASS_A_H
#define CLASS_A_H
class A
{
public:
A();
};
#endif
classA.cpp
#include "classA.h"
#include <iostream>
A::A()
{
std::cout << "Constructor A" << std::endl;
}
classB.h
#ifndef CLASS_B_H
#define CLASS_B_H
#include "classA.h"
class B : public A
{
public:
B();
};
#endif
classB.cpp
#include "classB.h"
#include <iostream>
B::B() : A()
{
std::cout << "Constructor B" << std::endl;
}
Makefile
SOURCES=main.cpp classA.cpp classB.cpp
TARGET=test
CXX_FLAGS=-g
.PHONY: all
all: $(TARGET)
$(TARGET): $(SOURCES)
$(CXX) $(CXX_FLAGS) $^ -o $@
.PHONY: clean
clean:
rm -vf $(TARGET)
Шаг для воспроизведения:
Запустите Emacs
M-X GDB
gdb -i = mi test
В командном окне gdb запустите: start
запустить: следующий
запустить: шаг
Моя среда: Ubuntu14.04, gdb - 7.7.1, emacs - 25.1.1.
Я пытался использоватьустановка окон посвященный-р, Но это не решение моей проблемы. Я новичок в Emacs, помогите мне, пожалуйста, что не так в моей конфигурации?