Linux GDB调试--启动程序进程调试:GDB 程序名

linux GDB调试--启动程序进行调试:GDB 程序名

linux GDB调试--对正在运行的程序进行调试:启动GDB后,attach 进程ID

linux GDB调试--对Coredumped文件进行调试:GDB 程序名 Coredumped文件名

调试准备

1、简单的累加

 1 #include <stdio.h>
 2 
 3 int main (void)
 4 {
 5     int count = 0;
 6     int i;
 7     for ( i = 0; i < 10; i++){
 8         count += i;
 9     }
10     printf("count = %d \n", count);
11     return 0;
12 }

2、makefile

1 cc = gcc
2 target = main
3 obj = add.o
4 $(target):$(obj)
5     $(cc) -g $(obj) -Wall -o $(target) -lpthread -lrt
6 add.o : add.c
7     $(cc) -c add.c -g -lpthread
8 .PHONY:clean
9     $(RM) *.o $(target)

注意:Makefile中只能出现tab开头,不能是四个空格,GDB调试编译必须带 -g 。

3、编译过程

调试过程

1、进入gdb调试

     gdb 编译生成的可执行文件

    

2、查看代码

     list或者l(l 等价于 list)

    直接回车表示执行上一条命令

    

3、设置断点

    a.直接根据函数名设置断点

        如break main或b mian (b 等价于 break)

    b.根据行数设置断点

        如b 8

    c.根据文件名和行数设置断点

        如 break add.c:8 在add.c中第8行设置断点

    查看断点 info breakpoint 或 i b(i 等价于info)

    

4、开始 

    开始执行

        start命令

    

    一步步执行:

        next或n(n等价于next)

       后可直接回车

        

    打印参数值

        print count

        

       前面表示打印次数

    p/[] 变量

    x 按十六进制格式显示变量。
    d 按十进制格式显示变量。
    u 按十六进制格式显示无符号整型。
    o 按八进制格式显示变量。
    t 按二进制格式显示变量。
    a 按十六进制格式显示变量。
    c 按字符格式显示变量。
    f 按浮点数格式显示变量。

    查看内存

        查看变量地址和值

        

       查看内存

        x/<n/f/u> <addr>

        

        

     查看机器码

         display/i $pc
         $pc是GDB的环境变量,表示着指令的地址,/i则表示输出格式为机器指令码。

posted @ 2018-04-17 15:18  gedihaha  阅读(2776)  评论(0编辑  收藏  举报