gdb调试

Posted 狂奔~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gdb调试相关的知识,希望对你有一定的参考价值。

1.使用命令:gcc demo.c -o app -g 生成app

2.gdb app

3.list命令,列出代码,后面可以使用l代替list

 

4.输入b + 行号,在对应的行号设置断点,b + 行号 if 。。。设置条件断点

5.info b 可以查看断点信息

 

 

(gdb) list
1    #include <stdio.h>
2    
3    int add(int a,int b)
4    {
5        return a + b;
6    }
7    
8    void main()
9    {
10        int i;
(gdb) l
11        int sum[10] = {0};
12        int arr1[10] = {11,22,33,44,55,66,77,88,99,100};
13        int arr2[10] = {1,2,3,4,5,6,7,8,9,10};
14        
15        for ( i = 0; i < 10; i ++ )
16        {
17            sum[i] = add(arr1[i],arr2[i]);
18        }
19        
20    }(gdb) l
Line number 21 out of range; demo1.c has 20 lines.
(gdb) b 5
Breakpoint 1 at 0x400550: file demo1.c, line 5.
(gdb) b 17 if i = 5
Breakpoint 2 at 0x40063a: file demo1.c, line 17.
(gdb) info b
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x0000000000400550 in add at demo1.c:5
2       breakpoint     keep y   0x000000000040063a in main at demo1.c:17
    stop only if i = 5
(gdb) 

 

6.可以取消断点 disable + 断点号,或delete + 断点号

7.命令run,让程序跑起来,在断点处停下

8.命令s,(step)单步执行,p + 变量名,打印变量的值

9.display + 变量名 ,每次都显示变量的值

 10.ptype 变量名——查看变量类型
 
 11.bt  查看当前程序函数栈帧使用基本情况
   函数的栈帧保存局部变量和临时值,形参,与局部变量等价。
 
12. info locals 查看当前栈帧上变量的存储值。
 
 13.frame 栈帧编号查看变量的值
 
 s——step
 n——next
14. finish 终止当前函数
15.continue 结束当前断点调试
16.
 p *数组名@10 列出数组前10个元素值
 p 数组名[n]@m 从下标n开始向后打印m个元素。

 










以上是关于gdb调试的主要内容,如果未能解决你的问题,请参考以下文章

代码调试篇:gdb调试快速入门指南

GDB代码调试与使用

GDB调试

使用GNU/gdb调试Linux C/C++可执行程序查看出错源代码、设置断点

代码调试工具GDB

代码调试篇:如何编写 gdb 自定义命令