我是Vim用户,对Emacs了解不多。我对Emacs感兴趣,因为我发现在Emacs中调试更愉快。例如,它提供语法突出显示,我可以使用鼠标设置断点。
除非遇到printf
,否则一切正常。
简单的插图代码:
1 #include <stdio.h>
2
3 int main()
4 {
5 int a = 1;
6 printf("%d\n", a);
7 int b = 2;
8 return 0;
9 }
emacs main.c
左键单击下半部分
M-x gdb [返回] [返回]
(gdb)b 6
(gdb)r
到目前为止,源代码显示在上半部分, gdb提示显示在下半部分。这正是我想要的。
(gdb)n
现在源代码消失,上半部分用于显示标准输出。这真的很不方便。我希望stdout显示在gdb缓冲区中,并且源保留在上层缓冲区中,就像gdb -tui
模式一样。
答案 0 :(得分:4)
不是每次都手动设置拆分,而是尝试telling GDB which windows you want available。
例如:
;; Show main source buffer when using GDB
(setq gdb-show-main t)
现在您可以简单地使用M-x gdb
来启动GDB,它应该将您的源代码缓冲区显示在拆分窗口中。
顺便提一下,Emacs&#39; GDB接口支持您可能要启用的许多其他窗口:
如果
gdb-many-windows
不是nil
,则M-x gdb
会显示 以下框架布局:+--------------------------------+--------------------------------+ | GUD interaction buffer | Locals/Registers buffer | |--------------------------------+--------------------------------+ | Primary Source buffer | I/O buffer for debugged pgm | |--------------------------------+--------------------------------+ | Stack buffer | Breakpoints/Threads buffer | +--------------------------------+--------------------------------+
如果您更改了窗口布局,则可以恢复&#34;许多 窗户&#34;通过键入
M-x gdb-restore-windows
进行布局。在两者之间切换 许多窗口布局和简单的布局与GUD 交互缓冲区和源文件,键入M-x gdb-many-windows
。您还可以指定要显示的其他GDB相关缓冲区, 无论是在同一帧还是不同的帧中。选择您的缓冲区 想要输入
M-x gdb-display-BUFFERTYPE-buffer
或M-x gdb-frame-BUFFERTYPE-buffer
,其中BUFFERTYPE是相关的缓冲区 类型,例如breakpoints
。您可以使用菜单栏执行相同的操作, 使用GDB-Windows
菜单的GDB-Frames
和GUD
子菜单。完成调试后,使用
C-x k
终止GUD交互缓冲区, 这也会杀死与会话相关的所有缓冲区。 但是,如果在编辑和重新编译之后你不需要这样做 Emacs中的源代码,您希望继续调试。当你 重启执行,GDB自动找到新的可执行文件。保持 GUD交互缓冲区具有保持shell的优点 历史以及GDB的断点。你需要检查一下 最近编辑的源文件中的断点仍在右侧 地方。
答案 1 :(得分:1)
您可能还想尝试M-x gud-gdb
。这是一个更加简单的用户界面,但我个人更喜欢它。