- 1 引言
- 2 准备工作:将调试信息编译在程序中
- 3 开始:开启Emacs的调试模式GUD
- 3.1 运行gdb
- 3.2 gdb界面
- 3.3 小结
- 4 调试:设置断点,控制程序流程
- 4.1 设置、删除断点
- 4.2 运行程序
- 4.3 单步执行、运行到光标处
- 4.4 继续运行程序
- 4.5 小结
- 5 察看变量的值
- 5.1 本地变量buffer
- 5.2 察看变量值
- 5.3 用工具提示显示变量值
- 5.4 小结
- 6 输入输出
- 6.1 单独的IO buffer
- 6.2 输入数据
- 6.3 重定向到文件
- 7 按键绑定
- 8 结尾
1 引言
Emacs除了具有强大的编辑功能,还可以作为调试工具gdb的前端,对程序进行调试。使用Emacs进行调试,可以将程序的编写与调试统一到Emacs中,并利用Emacs强大的功能辅助调试,是将Emacs作为IDE使用的一项必备功能。
本文假定读者具有基本的程序调试知识,希望知道在Emacs下进行基本调试的对应操作。水平有限,欢迎拍砖。
2 准备工作:将调试信息编译在程序中
要使程序能被gdb调试,需要在编译时加入调试所需的信息。如果使用gcc/g++进行编译,需要使用参数-g,如:
?View Code BASH
|
如果使用 ./confiugre && make 的编译流程,可以将使用如下方式引入-g参数:
?View Code BASH
| |
注意:不要加入任何优化参数(例如-O、-O2),不然调试时会有很灵异的现象发生……
3 开始:开启Emacs的调试模式GUD
3.1 运行gdb
在编译好程序后,就可以开始调试了。直接运行gdb命令M-x gdb RET 在minibuffer中会出现需要执行的gdb命令。例如:gdb –annotate=3 prog 如果当前目录下有可执行文件(通常恰好是需要调试的文件),gdb会在其后自动补上可执行文件,否则需要在minibuffer中补上要调试的程序文件 名。
继续回车,Emacs的GUD(Grand Unified Debugger)就会关联到gdb并加载要调试的程序了。
3.2 gdb界面
启动gdb后,Emacs的界面会变成下面两种之一:
GDB单窗格模式 | GDB多窗格模式 |
可以通过gdb-many-windows来切换这两种界面布局。
如果界面被打乱了(例如,在minibuffer中使用补全,查看帮助,重新编译程序),可以使用gdb-restore-windows来恢复界面布局。
3.3 小结
命令 | 功能 |
---|---|
gdb | 启动gdb进行调试 |
gdb-many-windows | 切换单窗格/多窗格模式 |
gdb-restore-windows | 恢复窗格布局 |
接下来就要开始调试程序了。
4 调试:设置断点,控制程序流程
4.1 设置、删除断点
首先将断点设置在要调试的地方。有两种方法:
第一种,在要设置断点的行左边的fringe上单击一下(就是文本左边与滚动条之间空出的那一块)。隐藏了fringe的朋友可以M-x fringe-mode显示它。
第二种,使用默认快捷键C-x C-a C-b, 或者 C-x <SPC>。它们都关联到命令gud-break。
无论使用哪种方法,fringe上都会在设置了断点的行上显示一个红点,表示这行设了断点: