一、简单的开始
1、有C代码如下
#include <stdio.h>
void main()
{
printf("Hello World!");
}
2、通过gcc编译
生成带有调试信息的可运行程序,编译参数-g
gcc -g hello.c -o hello
3、运行GDB
-q
表示不打印gdb版本信息,界面较为干净
root@ubuntu:/home/user/hello# gdb -q hello
Reading symbols from hello...done.
(gdb)
进入GDB以后,指令变得精简
二、基本操作
1、查看源代码
主要为了方便我们打断点
(gdb) l
1 #include <stdio.h>
2
3 void main()
4 {
5 printf("Hello World!");
6 }
(gdb)
2、设置断点
我们在第四行打个断点:break(b) 4
(gdb) b 4
Breakpoint 1 at 0x40052a: file hello.c, line 4.
(gdb)
3、几个运行指令
- 全速运行:
run(r)
- 继续执行:
continue (c )
- 单步跳过:
next( n)
- 单步:
step (s)
(gdb) r
Starting program: /home/user/hello
Breakpoint 1, main () at hello.c:5
5 printf("Hello World!");
(gdb)
4、函数调用
假设我们增加一个函数:
1 #include <stdio.h>
2
3 void hello(int number)
4 {
5 printf("Hello World! I am %d\n!",number);
6 }
7
8 void main()
9 {
10 int n = 0;
11 hello(n);
12 }
于是,我们可以调用程序中可见的函数,并传递“参数”:call 函数(参数)
(gdb)b 9
(gdb)r
Starting program: /home/user/hello
Breakpoint 1, main () at hello.c:10
10 int n = 0;
(gdb)call hello(5)
(gdb)c
Continuing.
Hello World! I am 5!
Hello World! I am 1!
5、打印变量
(gdb) print n
$1 = 0
(gdb) print n+1
$2 = 1
(gdb)
6、GUI界面
- layout:用于分割窗口,可以一边查看代码,一边测试
- layout src:显示源代码窗口 layout asm:显示反汇编窗口
- layout regs:显示源代码/反汇编和CPU寄存器窗口
- layout split:显示源代码和反汇编窗口
- Ctrl + L:刷新窗口
7、退出
退出gdb:quit(q)
Reading symbols from hello...done.
(gdb) q
root@ubuntu:/home/user/hello#