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

 sbn3552505 发布于 2023-01-07 19:36

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

除非printf遇到任何情况,否则一切正常。

用于说明的简单代码:

1 #include 
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
左下角单击
Mx gdb [return] [return]
(gdb)b 6
(gdb)r

到目前为止,源代码显示在上半部分,而gdb提示显示在下半部分。这正是我想要的。

(gdb)n

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

1 个回答
  • 与其每次都手动设置拆分,不如告诉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   |
    +--------------------------------+--------------------------------+
    

    如果您更改了窗口布局,则可以通过键入恢复“许多窗口”布局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-WindowsGDB-Frames子菜单来执行相同的操作GUD

    完成调试后,请使用杀死GUD交互缓冲区C-x k,这也将杀死与该会话关联的所有缓冲区。但是,如果在Emacs中编辑并重新编译源代码后希望继续调试,则无需执行此操作。当您重新开始执行时,GDB会自动找到新的可执行文件。保留GUD交互缓冲区的优点是可以保留Shell历史记录以及GDB的断点。您确实需要检查最近编辑的源文件中的断点是否仍在正确的位置。

    2023-01-07 19:37 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有