在Emacs中使用gdb:总是显示源代码

Use gdb within Emacs: always show the source code

本文关键字:显示 源代码 gdb Emacs      更新时间:2023-10-16

我是Vim用户,对Emacs了解不多。我对Emacs很感兴趣,因为我发现在Emacs中调试更加愉快。例如,它提供语法高亮显示,我可以用鼠标设置断点。

除了遇到printf之外,一切都很好。

简单的说明代码:

1 #include <stdio.h>
2 
3 int main()
4 {
5     int a = 1;
6     printf("%dn", a);
7     int b = 2;
8     return 0;
9 }

emacs c
左键点击下半部
m x gdb【返回】【返回】
(gdb) b 6
(gdb) r

至此,源代码显示在上半部分,gdb提示符显示在下半部分。这正是我想要的。

(gdb) n

现在源代码消失了,上半部分用来显示标准输出。这真的很不方便。我希望标准输出显示在gdb缓冲区中,并且源保持在上层缓冲区中,就像gdb -tui模式一样。

与其每次手动设置分割,不如尝试告诉GDB您想要使用哪些窗口。

例如:

;; Show main source buffer when using GDB
(setq gdb-show-main t)

现在你可以简单地使用M-x gdb来启动GDB,它应该保持你的源代码缓冲区显示在一个分割窗口。

顺便说一下,Emacs的GDB接口支持许多您可能想要启用的其他窗口:

如果gdb-many-windowsnil,则M-x gdb显示以下框架布局:

+--------------------------------+--------------------------------+
|   GUD interaction buffer       |   Locals/Registers buffer      |
|--------------------------------+--------------------------------+
|   Primary Source buffer        |   I/O buffer for debugged pgm  |
|--------------------------------+--------------------------------+
|   Stack buffer                 |   Breakpoints/Threads buffer   |
+--------------------------------+--------------------------------+

如果你改变了窗口布局,你可以恢复"many"输入M-x gdb-restore-windows。在两者之间切换许多窗口布局和一个简单的布局只有GUD交互缓冲区和源文件,输入M-x gdb-many-windows .

你也可以指定额外的gdb相关缓冲区显示,要么在同一帧里,要么在不同的帧里。选择您需要的缓冲区需要输入M-x gdb-display-BUFFERTYPE-bufferM-x gdb-frame-BUFFERTYPE-buffer,其中BUFFERTYPE是相关的缓冲区类型,如breakpoints。你也可以对菜单栏做同样的操作,GUD菜单的GDB-WindowsGDB-Frames子菜单。

当你完成调试时,用C-x k杀死GUD交互缓冲区,这也将杀死与会话相关的所有缓冲区。但是,如果在编辑和重新编译您的源代码在Emacs中,您希望继续调试。当你重新启动执行,GDB自动找到新的可执行文件。保持GUD交互缓冲具有保留shell的优点历史以及GDB的断点。你需要检查一下最近编辑的源文件中的断点仍然在右边的地方。

您可能也想尝试M-x gud-gdb。这是一个更简单的UI,但我个人更喜欢它。