~ / 文档 / Emacs 下程序的调试

1 使用 GDB 调试 C 或 C++ 程序

GDB 是 GNU 的调试器,它可以让您查看程序的内部结构、打印变量值、 设置断点,以及单步调试源代码。它是功能极其强大的工具,适用于修复程序代码中的问题。 它和 Emacs 算是同门,很容易进行集成。

1.1 编译程序

假设我们有一个程序 hello.cpp。

#include <iostream>

int main(void)
{
  char greeting[] = "Hello World!";
  std::cout << greeting << std::endl;
  return 0;
}

开始调试之前,必须用程序中的调试信息编译要调试的程序。这样,gdb 才能够调试所使用的变量、代码行和函数。如果要进行编译,请在 g++ (或 gcc)下使用额外的 '-g' 选项来编译程序。

$ g++ -g -o hello hello.cpp

1.2 在 Emacs 中打开 GDB

在 Emacs 编辑 hello.cpp 文件窗口下,通过下面命令启动一个独立的 gdb 窗口:

M-x gdb

然后输入 gdb -i=mi hello,表示 gdb 的解释器 (-interpreter) 使用最新的 mi 接口。

1.3 GDB 常用命令

command description
list 列出源码,可以用两个整数做参数,用逗号风格,来显示指定行的代码段。
run 运行程序至第一个断点。1
break 加断点,例如 break 5 表示在第 5行加一个断点。断点全部加好以后,可以再 run。
next 执行下一个语句。
continue 执行到下一个断点。
watch 观测 一个变量,例如 watch ret 表示观测 ret 变量。
print 输出一个变量的值,例如 print ret 表示向屏幕输出 ret 的值。
quit 退出 gdb 调试模式。

参考文档

Footnotes:

1

如果提示下面的信息,需要额外安装一些调试用的软件包。Fedora 下,debuginfo-install 在 yum-utils 包下。

(gdb) run
Starting program: /home/tommy/hello
(gdb) Missing separate debuginfos, use: debuginfo-install
glibc-2.14.1-6.i686 libgcc-4.6.3-2.fc15.i686
libstdc++-4.6.3-2.fc15.i686

$ sudo yum install yum-utils
$ sudo debuginfo-install glibc libgcc libstdc++

Tommy Wang
2016-05-27 10:22:46
Emacs 24.5.1 (Org mode 8.3.4)