【问题标题】:Use gdb within Emacs: always show the source code在 Emacs 中使用 gdb:始终显示源代码
【发布时间】:2014-06-24 12:29:16
【问题描述】:

我是 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 prompt显示在下半部分。这正是我想要的。

(gdb) n

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

【问题讨论】:

    标签: c++ c emacs


    【解决方案1】:

    不要每次都手动设置拆分,试试telling GDB which windows you want available

    例如:

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

    现在您可以简单地使用M-x gdb 启动 GDB,它应该让您的源代码缓冲区显示在拆分窗口中。

    顺便说一下,Emacs 的 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   |
    +--------------------------------+--------------------------------+
    

    如果你改变了窗口布局,你可以恢复“许多 windows”布局通过键入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 的断点。您确实需要检查 最近编辑的源文件中的断点仍在右侧 地方。

    【讨论】:

    • 接受“gdb-many-windows”。我将 (setq gdb-many-windows t) 添加到我的 .emacs 文件中。 ps:(setq gdb-show-main t)根本没有解决printf问题。
    【解决方案2】:

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

    【讨论】:

    • 这解决了我的问题,但代价是引入了另一个问题:GUI 不会显示断点,我也无法通过鼠标添加断点。
    猜你喜欢
    • 1970-01-01
    • 2011-04-10
    • 2014-04-24
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 2013-05-25
    • 2011-06-26
    • 2017-09-14
    相关资源
    最近更新 更多