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. Linux安装apache服务

    1.通过yum包下载安装httpd yum -y install httpd*(等待安装) 到下面就安装完毕 2.启动apache服务 service httpd restart 3.现在就可以查看a ...

  2. mui实现列表的下拉刷新上拉加载

    1.引入mui控件的js文件和css样式文件 <link rel="stylesheet" href="css/mui.min.css"> < ...

  3. [CF126D]Fibonacci Sums/[BJOI2012]最多的方案

    [CF126D]Fibonacci Sums/[BJOI2012]最多的方案 题目大意: 将\(n(n\le10^9)\)表示成若干个不同斐波那契数之和的形式,求方案数. 思路: 如果不考虑\(0\) ...

  4. PHP 基础函数(一)数组的键名和值

    array_values($arr);  获取数组的值,键名消失,原数组不变,返回转变后的数组:

  5. JQ自定义下拉列表插件

    自从上次做了JQ自定义分页插件和表格插件后,就没在自定义过插件了,这一个月都在用linq和ef,基本前端都没怎么去碰了,今天有个同事说有个项目需要在下拉框里面带有复选框,本来想网上找下插件的,一想,其 ...

  6. 用C++/CLI搭建C++和C#之间的桥梁(四)—— 网络资源

    关于C++/CLI的基础,我前面已经写过了几篇文章介绍过一些了,不过这些基本上都是管中窥豹,如果要详细了解C++/CLI,MSDN无疑是最好的教程. 使用 C++ 互操作(隐式 PInvoke) Vi ...

  7. Shell升级,/bin/bash版本号4.1到4.3

    bash环境变量存在随意代码运行漏洞:"通过CGI请求方式能够导致远程代码运行,进而导致server被入侵.危害严重.且官方发布补丁也被绕过", [漏洞影响]: 1)bash受影响 ...

  8. Centos7安装配置tomcat 9并设置自动启动

    原文:https://blog.csdn.net/stinkstone/article/details/78082725 1.官网下载安装包 这里选择适合Linux的安装包,下载到本地后上传到cent ...

  9. OpenERP实施记录(11):入库处理

    本文是<OpenERP实施记录>系列文章的一部分. 在前面的文章中,业务部门接到沃尔玛3台联想Y400N笔记本电脑的订单,采购部门完成了补货处理.因为该产品的“最少库存规则”里面定义了“最 ...

  10. squid中实现https的透明代理

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...