在Emacs中使用gdb:始终显示源代码

时间:2014-06-24 12:29:16

标签: c++ c emacs

我是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模式一样。

2 个答案:

答案 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-bufferM-x gdb-frame-BUFFERTYPE-buffer,其中BUFFERTYPE是相关的缓冲区   类型,例如breakpoints。您可以使用菜单栏执行相同的操作,   使用GDB-Windows菜单的GDB-FramesGUD子菜单。

     

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

答案 1 :(得分:1)

您可能还想尝试M-x gud-gdb。这是一个更加简单的用户界面,但我个人更喜欢它。