gdb调试工具使用(精辟)

         在项目的开发过程中,熟练使用一种调试工具,对我们的开发效率会有很大的帮助。

对于嵌入式软件开发工程师来说,熟练的使用gdb调试是我们的基本技能之一。本文我们以使用递归算法打印斐波拉契数列为例。对应文件名为febolaqi.c,相应的代码对应如下:

#include <stdio.h>

   int fobonaqi(int n){

          if(n == 0){

                   return 0;

           }

          else if(n == 1){

                   return 1;

           }else {

                  return fobonaqi(n-1)+fobonaqi(n-2);

          }

 }

  void main(){

        printf("\n");

          for(int i =1; i<=20; i++){

                printf("%d ",fobonaqi(i));

          }

         printf("\n");

  }

一 启动和退出gdb

         一般有三种方式来启动gdb调试工具。(注意在使用gcc 编译器的使用需要加 –g参数)。

第一种:gdb febolaqi ; 然后 输入 start  开始执行,然后next 跳到下一条语句。

第二种:gdb febolaqi core  ; 使用此方法需先获得core文件,当程序运行崩溃的时候,使用此方法可快速定位到程序出错的地方。如没有生成core文件,输入“ulimit –c 5000”命令

第三种:gdb febolaqi pid  ; 使用此方法调试已运行的程序

退出gdb: quit 

二 获取帮助

         gdb提供完备的在线帮助,让我们使用起来更加方便。所有的帮助信息都是通过运行help命令获得的。

如:输入help ; 获取章节列表

输入:help files ; 则会显示files的相关命令。

在此需要补充的几点是:

第一:命令的缩写,比如“run”命令,则输入“r”即可。

第二:tab键如linux命令行一样,具有自动补全功能。

第三:按下enter键,则会重复执行上一条命令。

三 程序的执行

1 :start  程序从头开始执行

2 :next  逐过程执行语句,类似于IDE不进入函数内部那个button.

3:step   逐语句执行,进入函数内部

4:print 打印需要查看的变量值,如print a;

5:list 列出函数清单,list 1 从第一行开始,列出十行。list 1,20 列出1到20行,list fobolaqi 列出fobolaqi这个函数的清单

6:display ;每次执行停顿的时候,都将display变量的值。比如 display i; undisplay 取消

7:kill  当程序无法退出时,kill将该程序强制退出。

8: x  通过x可检查某一内存区域中的数据。x  /Nh 表达式 N表示输出字符的个数,h双字节。 

四 控制gdb的行为

         gdb通过提供参数的形式,让我们能控制其行为。通过使用set 和 show命令,可以设置各个参数。

如:

五 查看符号表

查看符号表,可通过help来获取info,ptype,whatis.三个命令来查看程序中的符号表。

六 断点

  gdb支持软件程序员中断,硬件程序中断和数据中断。gdb中设置这三种断点需要使用不同的命令。

第一:软件中断 break 11 在第11行设置断点,然后 continue。还可以通过if设置断点,当满足先觉条件时中断才发生。如:break mpool.c :85 if index = 3

当调试的是一个多线程程序时,可以在break命令完整的语法格式。

break location [thread threadnum] [if condtion]

通过disable和enable命令可以分别使任意一个断点无效和有效。

info breakpoints 查看断点信息

第二:硬件程序断点 hbreak

第三:数据断点的设置需要使用watch命令,其参数是我们观察的值改变的变量名

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值