使用gdb调试程序

原创 2015年07月10日 10:54:24

gdb是一个功能很强大的调试器,它是一个自由软件,能够使用在很多的UNIX平台上,它同时也是linux系统默认的调试器。

一般来说,GDB主要帮忙你完成下面四个方面的功能:

    1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
    2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
    3、当程序被停住时,可以检查此时你的程序中所发生的事。
    4、动态的改变你程序的执行环境。

1.启动gdb

    首先程序编译时,必须加入调试信息

     cc -g -o test test.c

     gdb test

2.运行一个程序

    进入gdb后,输入run命令,运行程序,可以发现程序中错误的地方。

    可以简写r

3.栈跟踪

    backtrace命令可以查出程序是如何到达某一个位置。追踪函数的相互调用关系。

    简写bt.

4.检查变量

   gdb在停止程序时给出的信息以及跟踪栈得到的信息可以让我们看到函数参数的取值。

   使用print 可以显示参数的取值。gdb将结果保存在伪变量$<number>中,最后一次的操作结果总是$

   倒数第二次的操作结果是$$

    数组显示 print array[0]@5;

      file::variable
  function::variable

5.列出程序的源代码

    list 简写l

6.设置断点

    help breakpoint 查看断点的帮助信息

   

    break <linenum>
        在指定行号停住。

    break +offset
    break -offset
        在当前行号的前面或后面的offset行停住。offiset为自然数。

    break filename:linenum
        在源文件filename的linenum行处停住。

    break filename:function
        在源文件filename的function函数的入口处停住。

    break *address
        在程序运行的内存地址处停住。

    break
        break命令没有参数时,表示在下一条指令处停住。

    break ... if <condition>
        ...可以是上述的参数,condition表示条件,在条件成立时停住。比如在循环境体中,可以设置break if i=100,表示当i为100时停住程序。

    查看断点时,可使用info命令,如下所示:(注:n表示断点号)
    info breakpoints [n]
    info break [n]


          cont /继续运行

          next  ..n 执行下一条语句

          display 每次到断点时自动的显示变量的内容。

          在程序到达断点时,不是停下来而是执行一定的命令。可以使用command +end 。 


7.gdb也可以运行shell命令

   shell <command>

8.设置观察点

    观察点一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,如果有变化,马上停住程序。我们有下面的几种方法来设置观察点:
   
  watch <expr>
    为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。
       
  rwatch <expr>
        当表达式(变量)expr被读时,停住程序。
       
  awatch <expr>
        当表达式(变量)的值被读或被写时,停住程序。
   
  info watchpoints
        列出当前所设置了的所有观察点。


8.在GDB中运行程序
————————

当以gdb <program>方式启动gdb后,gdb会在PATH路径和当前目录中搜索<program>的源文件。

如要确认gdb是否读到源文件,可使用l或list命令,看看gdb是否能列出源代码。

在gdb中,运行程序使用r或是run命令。程序的运行,你有可能需要设置下面四方面的事。

1>、程序运行参数。
    set args 可指定运行时参数。(如:set args 10 20 30 40 50)
    show args 命令可以查看设置好的运行参数。

2>、运行环境。
    path <dir> 可设定程序的运行路径。
    show paths 查看程序的运行路径。
    set environment varname [=value] 设置环境变量。如:set env USER=hchen
    show environment [varname] 查看环境变量。

3>、工作目录。
    cd <dir> 相当于shell的cd命令。
    pwd 显示当前的所在目录。

4>、程序的输入输出。
    info terminal 显示你程序用到的终端的模式。
    使用重定向控制程序输出。如:run > outfile
    tty命令可以指写输入输出的终端设备。如:tty /dev/ttyb

9线程(Thread Stops)

如果你程序是多线程的话,你可以定义你的断点是否在所有的线程上,或是在某个特定的线程。

GDB很容易帮你完成这一工作。

    break <linespec> thread <threadno>
    break <linespec> thread <threadno> if ...
        linespec指定了断点设置在的源程序的行号。threadno指定了线程的ID,注意,

这个ID是GDB分配的,你可以通过“info threads”命令来查看正在运行程序中的线程信息。如果你不指定thread <threadno>则表示你的断点设在所有线程上面。你还可以为某线程指定断点条件。如:
   
        (gdb) break frik.c:13 thread 28 if bartab > lim

    当你的程序被GDB停住时,所有的运行线程都会被停住。这方便你你查看运行程序的总体情况。

而在你恢复程序运行时,所有的线程也会被恢复运行。那怕是主进程在被单步调试时。



版权声明:本文为博主原创文章,未经博主允许不得转载。

使用gdb调试程序完全教程

程序的调试过程主要有:单步执行,跳入函数,跳出函数,设置断点,设置观察点,查看变量。 本文将主要介绍linux下的强大调试工具是怎么完成这些工作的。之所以要调试程序,是因为程序的运行结果和预期结果不...
  • gatieme
  • gatieme
  • 2016年06月14日 14:21
  • 10639

Linux下使用GDB调试应用程序示例

Linux下使用GDB调试应用程序 示例
  • yuesichiu
  • yuesichiu
  • 2014年12月09日 15:04
  • 1523

Linux下利用GDB调试快速找到Bug

调试程序最让人头疼的就是层出不断的Bug,而且有些Bug不容易定位,下面介绍一种很强大的调试工具:GDB 虽然之前听过GDB调试,但是自己调试时一直没使用过。今天在调试highmac程序时,遇...
  • megayangyang
  • megayangyang
  • 2017年03月01日 19:22
  • 202

linux使用gdb调试程序完全教程

转自 http://blog.csdn.net/gatieme 程序的调试过程主要有:单步执行,跳入函数,跳出函数,设置断点,设置观察点,查看变量。  本文将主要介绍linux下的强大调试工具是怎...
  • PZ0605
  • PZ0605
  • 2016年09月06日 14:29
  • 4002

用arm-linux-gdb调试ARM上的应用程序

我根据arm-linux-gdb的调试对象,把调试分为二大类。即底层代码的调试,如u-boot、裸机程序等;或者应用程序的调试,即elf格式的可执行文件。根据我的经验,应用程序的调试相对要容易很多。下...
  • wuxiangege
  • wuxiangege
  • 2015年07月11日 18:01
  • 1271

使用GDB调试程序

1、GDB简单使用教程(1)源文件
  • atinybirdinit
  • atinybirdinit
  • 2014年09月13日 18:47
  • 679

用GDB调试程序 - Ubuntu中文

终于找到了一个是在u 导读: 用GDB调试程序 出自Ubuntu中文 目录 [隐藏] 1 GDB概述  2 一个调试示例  3 使用GDB  4 GDB的命令概貌  5...
  • guang_jing
  • guang_jing
  • 2014年05月04日 08:34
  • 2039

Ubuntu下GDB调试C语言程序

转自:这里 1.GDB是什么 GDB是GNU开源组织发布的一个UNIX下的程序调试工具,专门用来调试C,C++这些程序的了,而且都是命令行模式的。2.准备工作 平时我们在IDE开发得时候,必须在...
  • TinyMore
  • TinyMore
  • 2017年03月12日 19:50
  • 911

cygwin的安装及编译和调试程序

1 cygwin的安装 在官网上下载一个安装程序 http://www.cygwin.com/     点击右边有个图标,“ install cgywin now" 这只是一个安装程序,双击后...
  • thanklife
  • thanklife
  • 2017年02月07日 17:35
  • 1244

linux下使用gdb调试程序

gdb是强大的UNIX下的程序调试工具,提供4个主要的功能: 1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达...
  • loophome
  • loophome
  • 2015年12月09日 10:36
  • 325
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用gdb调试程序
举报原因:
原因补充:

(最多只允许输入30个字)