1、GDB调试器概述

  GDB是GNU开源组织发布的一个强大的程序调试工具,具有查看程序运行状态、设置断点、查看表达式、显示变量等众多功能,是程序员进行Linux编程必须要掌握的一种调试技术。

  GDB调试工具的优势主要包含以下5个方面:

  (1)用户可以在程序运行过程中查看运行的状态;

  (2)用户可以在程序中任何需要的地方设置断点,并暂停程序的执行;

  (3)当程序暂停时,用户可以随时查看程序中各表达式、变量值以及内存值;

  (4)程序暂停时用户可以进行单步调试,依此检查程序每步运行的结果是否跟预测值一致,并且可以检查每步出现的错误;

  (5)用户可以改变程序中的变量或者执行顺序,来验证程序是否正确。

  并不是任何程序都可以使用GDB进行调试,要使用GDB进行调试必须满足两个条件:

  (1)程序必须使用GCC进行编译,并且在编译过程中添加“-g”调试信息选项。

  (2)要调试的可执行文件必须存在源程序代码,一般源程序代码存放的目录需要与可执行文件的目录相同。

  以上两个条件缺一不可,如果不添加-g选项,GDB将不能获取调试信息;如果缺少源程序代码,GDB将不能加载源文件并显示错误信息。

  在gcc编译时,因为使用优化会改变程序的运行结果,所以建议读者不要使用-O优化选项,这样才能使生成的可执行文件和源代码保持一一对应的关系;其次,用户如果想生成更多的调试信息,可在GCC编译时使用-ggdb选项。

2、GDB的启动

  GDB的启动方法非常简单,只需在命令行输入如下格式即可:

  #gdb  [options]  [file]

  此格式表示使用gdb调试工具对可执行文件file进行“options”调试。常用的选项如下:

  -b baudrate  设置远程调试的串口波特率

  --cd=DIR    进入gdb调试时改变当前路径到DIR目录

  --quiet     启动gdb后不打印许可信息

  --fullname   使用emacs-GDB交互显示输出信息

  -w        使用窗口交互

  -help      打印帮助信息

  --se=File    使用File作为可执行文件和变量文件

  --version    打印当前版本信息并退出

  --command=File  进入gdb调试后执行File文件中的命令

3、GDB调试命令

  启动gdb后,在gdb环境中输入help就会显示所有的帮助种类。gdb把命令分成不同的类别,其中主要的种类包括:

  (1)breakpoints:断点设置类

  (2)data:    数据查看类

  (3)files:    指定并查看文件类

  (4)internals:  维护命令类

  (5)running:  程序执行类

  (6)stack:   调用栈查看类

  (7)status:   状态查看类

  (8)tracepoints:跟踪程序执行类

  help命令只是列出gdb的命令种类,如果要看种类中的子命令,可以使用help <class>命令,如:help breakpoints,表示查看设置断点的所有命令。

  GDB中比较重要的4类命令介绍:

  (1)断点设置类相关命令主要用来在调试程序中设置断点:

  break 行号:在指定的行号上设置断点

  break 函数:在“函数”名所在的行设置断点,使程序恰好在进入指定的函数前停止

  info break:显示所有断点信息

  delete 断点号:表示将指定的断点号删除,如果不指定要删除的断点号,系统默认删除所有断点号,断点号可通过info break的第一栏查询

  disable 断点号:禁止指定的断点号,同delete一样,如果不指定断点号,则禁止当前文件下所有的断点

  enable 断点号:激活指定的断点号,即激活被disable禁止的断点

  ignore 断点号 num:在程序执行中,忽略对应断点num次

  tbreak 行号或函数:设置临时断点,程序执行一次后,断点被自动删除

  watch expression:设置一个表达式的观测点

  clear [FILE:]NUM: 删除设置在特定源文件或者特定行上的断点

  clear与delete都是清除断点,但是两者的区别在于,clear命令后面要给出清除的断点所在的行的行号,而delete命令是给出清除断点的编号;其次,使用clear命令清除断点时,gdb会自动给出提示,delete命令则不会。

  (2)数据查看类相关命令可以用来查看程序中变量及内存信息:

  display [expr]:在每次程序停止时自动显示对应表达式expr的内容

  delete display [expr]:取消每次程序停止时显示对应表达式expr的内容

  delete mem:删除内存区域中的内容

  disable display [expr]:程序停止时禁止显示指定表达式expr的内容

  undisplay [expr]:禁止显示指定表达式expr的内容

  enable display [expr]:激活禁止显示的表达式expr

  print [expr][name]:打印当前表达式或变量的内容

  whatis [name]:显示变量的数据类型

  ptype [name]:显示用户结构体的定义内容

  print的显示格式:

  /x  按十六进制格式显示变量

  /d  按十进制格式显示变量

  /u  按十六进制格式显示无符号整型

  /o  按八进制格式显示变量

  /t  按二进制格式显示变量

  /a  按十六进制格式显示变量

  /c  按字符格式显示变量

  /f  按浮点数格式显示变量

  dispaly可以用来设置一些自动显示的变量,当程序暂停时,或者用户单步跟踪时,这些变量的值将会自动显示;print只能显示当前用户指定的变量或者表达式的值,当程序下一次单步执行或者暂停时,不会显示上次设定变量的值。

  (3)文件查看类命令主要用于程序文件的查看以及程序的编辑:

  cd DIR:将工作目录设置在DIR下

  directory DIR:在搜寻源文件时也搜索DIR目录

  file File:表示加载指定文件File进gdb

  search 正则表达式及变量:向前搜索正则表达式及变量

  foward-search 正则表达式及变量:向前搜索正则表达式

  reverse-search 正则表达式及变量:向后搜说正则表达式

  pwd:打印当前工作目录

  path DIR:在搜索文件路径时也搜索DIR目录

  load file:在运行程序时,动态加载file文件

  list [行号][函数名]:列出对应于正在执行的程序的源文件内容,后面不加任何参数表示显示10行源文件内容。list也可使用其缩写形式l

  info line:显示加载到内存中的代码

  (4)程序控制相关命令

  在使用GDB调试过程中大致分为3中状态:运行态、暂停态以及结束态,其中暂停态使程序暂停在某个断点处,它在程序调试中用的最多;结束态是用户调试完毕,要跳出gdb的状态,在此状态下无法查看各种变量的值;运行态是除暂停态和结束态之外的所有状态。

  run:表示执行程序

  continue:继续执行正在调试的程序,该命令用在程序由于处理信号或断点导致停止运行时

  interrupt:中断调试程序的执行

  next:单步调试程序,不进入子函数单步执行

  nexti:单步调试一条指令

  step:单步调试程序,进入子函数单步执行

  kill:终止正在调试的程序

  set args:当被调试程序开始运行时,设置程序的参数列表

  set environment:设置程序环境变量的值

  show args:显示一开始调试程序的参数列表

  set step-mode:设置单步运行的模式

  show step-mode:显示单步运行的模式

  finish:运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息

  until:结束当前循环

  make:在不退出gdb的前提下执行make命令

软件调试工具——GDB的更多相关文章

  1. 应用程序调试工具gdb,王明学learn

    应用程序调试工具gdb学习使用 一.GDB简介 GDB 是 GNU 发布的一款功能强大的程序调试工具.GDB 主要完成下面三个方面的功能: 1.启动被调试程序. 2.让被调试的程序在指定的位置停住. ...

  2. C实战:强大的程序调试工具GDB

    C实战:强大的程序调试工具GDB 1.基本调试 这里只列举最最常用的GDB命令. 1.1 启动GDB gdb program:准备调试程序.也可以直接进入gdb,再通过file命令加载. 1.2 添加 ...

  3. 调试工具gdb

    1.1 gdb符号调试器简介 gdb是一个用来调试C和C++程序的功能强大的调试器,它能在程序运行时观察程序的内部结构和内存的使用情况. gdb主要提供以下几种功能: 监视程序中变量值的变化 设置断点 ...

  4. 调试工具GDB详解

    1 简介 2 生成调试信息 3 启动GDB 的方法 4 程序运行上下文 4.1 程序运行参数 4.2 工作目录 4.3 程序的输入输出 5 设置断点 5.1 简单断点 5.2 多文件设置断点 5.3 ...

  5. 关于 Xcode 调试工具 GDB and LLDB

    xcode 5 好像弃用了GDB .而默认使用苹果自己开发的调试工具 LLDB. http://iosre.com/forum.php?mod=viewthread&tid=52    LLD ...

  6. 常用调试工具gdb,dbx,valgrind介绍一

    类UNIX下C/C++开发,代码调试比较麻烦,最原始的加跟踪调试很土,也很费时,特别是一个庞大的项目,代码行数非常大的时候调试起来非常费劲,当core dump时定位也不容易,这里介绍几个常用工具: ...

  7. C/C++调试工具gdb

    关于Gdb的使用,请参考:http://blog.csdn.net/haoel/article/details/2879

  8. windows下使用MinGW的调试工具gdb.exe调试C程序

    1.编译源代码 C:MinGW\bin>gcc.exe -g -o program.exe program.c 编译选项上要加上“g”,这样生成的目标程序会含有调试内容,再用gdb调试的时候才能 ...

  9. linux开发调试工具---GDB的使用

    编译 gcc  -g  xxx.c  -o xxxgdb gdb  xxxgdb 进入gdb调试界面 查看代码 list   ==>  l 设置断点   可以以函数为断点 /  行数 break ...

随机推荐

  1. 【BZOJ 2119】 2119: 股市的预测 (后缀数组+分块+RMQ)

    2119: 股市的预测 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 404  Solved: 188 Description 墨墨的妈妈热爱炒股,她 ...

  2. 一文了解JVM全部垃圾回收器,从Serial到ZGC

    <对象搜索算法与回收算法>介绍了垃圾回收的基础算法,相当于垃圾回收的方法论.接下来就详细看看垃圾回收的具体实现. 上文提到过现代的商用虚拟机的都是采用分代收集的,不同的区域用不同的收集器. ...

  3. bzoj1954 The xor-longest path

    Description  给定一棵n个点的带权树,求树上最长的异或和路径 Input The input contains several test cases. The first line of ...

  4. 普及向 ZKW线段树!

    啊,是否疲倦了现在的线段树 太弱,还递归! 那我们就欢乐的学习另外一种神奇的线段树吧!(雾 他叫做zkw线段树   这个数据结构灰常好写(虽然线段树本身也特别好写……) 速度快(貌似只在单点更新方面比 ...

  5. python相对包导入报“Attempted relative import in non-package”错误

    文章是从stackoverflow翻译过来的,原文地址:Relative imports for the billionth time 本文要在原理上解决  python当中相对包导入出现的问题. 问 ...

  6. python画激活函数图像

    导入必要的库 import math import matplotlib.pyplot as plt import numpy as np import matplotlib as mpl mpl.r ...

  7. LT1946A-- Transformerless dc/dc converter produces bipolar outputs

    Dual-polarity supply provides ±12V from one IC VC (Pin 1): Error Amplifier Output Pin. Tie external ...

  8. VS2010程序打包操作(超详细的)转

    1.  在vs2010 选择“新建项目”----“其他项目类型”----“Visual Studio Installerà“安装项目”: 命名为:Setup1 . 这是在VS2010中将有三个文件夹, ...

  9. DELPHI PROTOBUF免费的开源支持库fundamentals5

    DELPHI PROTOBUF免费的开源支持库fundamentals5 1.源码URL: https://github.com/fundamentalslib/fundamentals5 2.编译P ...

  10. 【资料】wod食物

    注意:1. 除非另外注明, 所有效果持续时间为整个地城2. 某几样食物若使用午饭时间技能, 效果只有LV1 (lunch level -25), 请小心服用. X技能等级 = 技能等级 焖豆属性奖励体 ...