Ubuntu 11自带gcc和gdb,下面是使用gdb调试代码的过程:
-
首先写一个简单的hw.c程序:
include
int main() { char str[] = "hello, world"; printf("%s\n",str); return 0; }
-
编译并运行源代码(gcc指令必须有-g选项,不能加-Wall选项,否则无法调试):
chad@ubuntu:~/Documents\( gcc -g hw.c -o hw chad@ubuntu:~/Documents\) ./hw hello, world
-
用gdb调试编译出来的文件:
chad@ubuntu:~/Documents$ gdb hw GNU gdb (Ubuntu/Linaro 7.3-0ubuntu2) 7.3-2011.08 ... (gdb) b 3 Breakpoint 1 at 0x8048449: file hw.c, line 3. (gdb) r Starting program: /home/chad/Documents/hw Breakpoint 1, main () at hw.c:3 3 char str[] = "hello, world"; (gdb) p str $1 = "\000\364\217*\000U<\026\000\231\204\004\b" (gdb) s 4 printf("%s\n",str); (gdb) p str $2 = "hello, world"
(gdb) p str[1]='y' $3 = 121 'y' (gdb) p str $4 = "hyllo, world"
(gdb) p $2 $5 = "hello, world"
(gdb) c Continuing. hello, world [Inferior 1 (process 3345) exited normally] (gdb) q chad@ubuntu:~/Documents$
上述操作过程,代码前面的标号是行号。用户输入的指令,"b 3"表示在第3行打断点,r表示run,p表示print,s表示step(即step in),这里也可以用n(next,即step over),c表示continue,q表示quit。可以看到step指令之前打印str的值是一个随机值(因为还没有赋值),step之后(到第4行)就有了值;
p指令除了可以显示程序变量值,还可以修改变量值,如上面的p str[1]='y';
gdb每次输出都被保持到了一个格式为$n的变量中,后面可以再引用这个变量,如上面的p $2;
可以用l(list)指令打印出完整的源代码。
C++
$ g++ -g srcfile.cc -o rr
$ gdb rr
$ l
这里"-g"选项是必须的,否则gdb无法得到原文件信息。
Windows平台
Code::Blocks是目前唯一实现了断点调试的Windows平台上C开发环境(它本身是跨平台的),带MinGW安装包100MB,不带MinGW的20MB多,比较符合轻量级的要求;