• 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

gcc prog.c -g -o prog

如果使用 ./confiugre && make 的编译流程,可以将使用如下方式引入-g参数:

?View Code BASH

1
2
CFLAGS="-g" ./configure
make

注意:不要加入任何优化参数(例如-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的界面会变成下面两种之一:

emq 怎么启动_emq 怎么启动

GDB单窗格模式

emq 怎么启动_GDB_02

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上都会在设置了断点的行上显示一个红点,表示这行设了断点:

emq 怎么启动_emq 怎么启动_03