在Emacs中使用gdb:总是显示源代码
Use gdb within Emacs: always show the source code
我是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,它应该保持你的源代码缓冲区显示在一个分割窗口。
如果
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 | +--------------------------------+--------------------------------+
如果你改变了窗口布局,你可以恢复"many"输入
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
。你也可以对菜单栏做同样的操作,GUD
菜单的GDB-Windows
和GDB-Frames
子菜单。当你完成调试时,用
C-x k
杀死GUD交互缓冲区,这也将杀死与会话相关的所有缓冲区。但是,如果在编辑和重新编译您的源代码在Emacs中,您希望继续调试。当你重新启动执行,GDB自动找到新的可执行文件。保持GUD交互缓冲具有保留shell的优点历史以及GDB的断点。你需要检查一下最近编辑的源文件中的断点仍然在右边的地方。
您可能也想尝试M-x gud-gdb
。这是一个更简单的UI,但我个人更喜欢它。
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 在Linux中哪里可以找到互斥、未来等的源代码
- 如何使Chrome Dev Tools显示JavaScript源代码
- 在 GDB 中调试生成的代码时显示原始源代码
- 如何在printf中显示我的源代码的行号
- Doxygen 不显示带有 c++ 模板的源代码
- LLDB没有显示源代码
- libstdc++-v3中的GCC源代码修改未显示
- 导出 html 时,组织模式无法突出显示C++源代码
- Emacs GDB 不会在源代码缓冲区中显示当前程序光标
- c++和VS2010-没有为任何调用堆栈帧加载符号.无法显示源代码
- 收集并显示emacs中源代码中的c++TODO注释列表
- 显示 new() 在 malloc 返回的地址调用对象的构造函数的源代码
- GDB不显示正确的源代码由指令-l
- 没有为任何调用堆栈帧加载符号.无法显示源代码
- 在Emacs中使用gdb:总是显示源代码
- 为什么从文档 OpenCV 剂量中找到的源代码人脸检测没有显示任何东西
- 开放源代码YUV420到RGB的源代码或直接显示
- 我的源代码是否显示了我自己对c++中结构的理解