DarkMatter in Cyberspace
  • Home
  • Categories
  • Tags
  • Archives

gdb Notes


Ubuntu 11自带gcc和gdb,下面是使用gdb调试代码的过程:

  1. 首先写一个简单的hw.c程序:

    include

    int main() { char str[] = "hello, world"; printf("%s\n",str); return 0; }

  2. 编译并运行源代码(gcc指令必须有-g选项,不能加-Wall选项,否则无法调试):

    chad@ubuntu:~/Documents\( gcc -g hw.c -o hw chad@ubuntu:~/Documents\) ./hw hello, world

  3. 用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多,比较符合轻量级的要求;



Published

Dec 11, 2012

Last Updated

Dec 11, 2012

Category

Tech

Tags

  • C 12
  • IDE 26
  • ubuntu 61
  • Windows 67

Contact

  • Powered by Pelican. Theme: Elegant by Talha Mansoor