目录

一、gdb简介

二、gdb的安装

三、调试前的准备

四、基本调试命令

举个例子

五、其他命令


一、gdb简介

  • GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具
  • 对于一名Linux下工作的c/c++程序员,gdb是必不可少的工具

二、gdb的安装

CentOS系统中,用root用户登录服务器,执行以下命令安装或升级

yum -y install gdb
  1. 如果您的服务器没有安装gdb,以上命令就会安装最新版本的gdb,如果已经安装了gdb,就会更新到最新版本的gdb
  2. 安装gdb,前提条件是服务器必须接入互联网

三、调试前的准备

用gcc编译源程序的时候,编译后的可执行文件不会包含源程序代码,如果您打算编译后的程序可以被调试,编译的时候要加 -g 的参数

例如:

 gcc -g -o 文件名 文件名.c

在命令提示符下输入gdb 加上你要调试的程序名就可以调试了

 gdb 文件名

四、基本调试命令

命令

命令缩写

命令说明

set args

  • 设置主程序的参数
  • 例如:./文件名  参数
  • 设置参数的方法是:
  • gdb 文件名
  • (gdb) set args 参数

break

b

  • 设置断点,b 20 表示在第20行设置断点,可以设置多个断点

run

r

  • 开始运行程序, 程序运行到断点的位置会停下来,如果没有遇到断点,程序一直运行下去

next

n

  • 执行当前行语句,如果该语句为函数调用,不会进入函数内部执行

step

s

  • 执行当前行语句,如果该语句为函数调用,则进入函数执行其中的第一条语句
  • 如果函数是库函数或第三方提供的函数,用s也是进不去的,因为没有源代码,如果是您自定义的函数,只要有源码就可以进去

print

p

  • 显示变量值,假如我有一个变量name
  • 例如:p name表示显示变量name的值

continue

c

  • 继续程序的运行,直到遇到下一个断点

set var name=value

  • 设置变量的值,假设程序有两个变量:int i; char name[21];
  • set var i=10 把i的值设置为10;
  • set var name="小酋" 把name的值设置为"小酋"
  • 注意,不是strcpy

quit

q

退出gdb环境

举个例子

#include <stdio.h>
#include <string.h>int mystrcmp(const char *str1,const char *str2)
{int i = 0;int len = 0;//  str1 和 str2 较短的字符串长度if ( strlen(str1) > strlen(str2) )  len = strlen(str2);else len = strlen(str1);for (i = 0;i < len;i++) {if (str1[i]==str2[i]) continue;else break;}// 两个字符串相等if ( (i==len) && (strlen(str1)==strlen(str2))  ) return 0;// 两个字符串不相等else if (str1[i]>str2[i]) return 1;else return -1;
}    int main()
{char name1[21];memset(name1,0,sizeof(0));strcpy(name1,",xiaoqiu");char name2[21];memset(name2,0,sizeof(0));strcpy(name2,"hello");printf("%d\n",mystrcmp(name1,name2));return 0;
}

调试以上程序

这里就进入到了 gdb 的调试界面了

list(简写 l): 查看源程序代码,默认显示10行,按回车键继续往下看10行

  1. break(简写 b) :格式 b 行号,在某行设置断点
  2. info breakpoints :显示断点信息
  3. Num: 断点编号
  4. Disp:断点执行一次之后是否有效  (keep:有效 dis:无效)
  5. Enb: 当前断点是否有效  (y:有效 n:无效)
  6. Address:内存地址
  7. What:位置

run (简写 r) :运行程序直到遇到结束或者遇到断点等待下一个命令

使用 b r n p s 命令

五、其他命令

除了基本命令外,gdb 还有一些其他命令

  1. continue 简写 c :继续执行,到下一个断点处(或运行结束)
  2. until:当你厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体
  3. until+行号: 运行至某行,不仅仅用来跳出循环
  4. finish: 运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息
  5. call 函数(参数):调用程序中可见的函数,并传递“参数”
  6. delete 断点号n:删除第n个断点
  7. disable 断点号n:暂停第n个断点
  8. enable 断点号n:开启第n个断点
  9. clear 行号n:清除第n行的断点
  10. info b (info breakpoints) :显示当前程序的断点设置情况
  11. delete breakpoints:清除所有断点
  12. list 行号:将显示当前文件以“行号”为中心的前后10行代码,如:list 12
  13. list 函数名:将显示“函数名”所在函数的源代码,如:list main
  14. display 表达式:在单步运行时将非常有用,使用display命令设置一个表达式后,它将在每次单步进行指令后,紧接着输出被设置的表达式及值。如: display a
  15. watch 表达式:设置一个监视点,一旦被监视的“表达式”的值改变,gdb将强行终止正在被调试的程序。如: watch a
  16. whatis :查询变量或函数
  17. info function: 查询函数
  18. info locals: 显示当前堆栈页的所有变量
  19. where/bt :当前运行的堆栈列表;
  20. bt backtrace :显示当前调用堆栈
  21. up/down :改变堆栈显示的深度
  22. show args:查看设置好的参数
  23. info program: 来查看程序的是否在运行,进程号,被暂停的原因
  24. layout:用于分割窗口,可以一边查看代码,一边调试
  25. layout src:显示源代码窗口
  26. layout asm:显示反汇编窗口
  27. layout regs:显示源代码/反汇编和CPU寄存器窗口
  28. layout split:显示源代码和反汇编窗口
  29. Ctrl + L:刷新窗口

重点掌握基本命令就行,其他命令很多,可以自己去测试一下,了解一下即可,不用去死记硬背,看实际需求吧 ,命令这种东西用多了自然就熟悉了

C语言gdb调试详解相关推荐

  1. C语言中编译预处理命令作用,C语言预处理命令详解

    原标题:C语言预处理命令详解 关注百问科技并将它设为星标 不错过任何一篇嵌入式干货 ------ 作者:clover_toeic 原文出处: https://www.cnblogs.com/clove ...

  2. 【排序】什么都能排的C语言qsort排序详解【超详细的宝藏级别教程】深度理解qsort排序

    [排序]什么都能排的C语言qsort排序详解[超详细的宝藏级别教程]深度理解qsort排序 作者: @小小Programmer 这是我的主页:@小小Programmer 在食用这篇博客之前,博主在这里 ...

  3. C语言自定义类型详解

    C语言自定义类型详解 一.结构体 1.结构的声明 2.特殊的声明 3.结构的自引用 4.结构体变量的定义和初始化 5.结构体内存对齐 6.修改默认对齐数 7.结构体传参 二.位段 1.什么是位段 2. ...

  4. (转)C语言位运算详解

    地址:http://www.cnblogs.com/911/archive/2008/05/20/1203477.html C语言位运算详解 作者:911 说明:本文参考了http://www2.ts ...

  5. R语言基础知识详解及概括

    R语言基础知识详解及概括 目录 R语言基础知识详解及概括 R数据可视化示例 R语言进行数据创建

  6. eclipse调试详解

    eclipse调试详解 作者: 高州人家 来源: 网络转载 浏览: 1610 次 好评: 0分 [ 小 中 大 ] 2007-11-16 本地调试     Java   调试器具有客户机/服务器设计, ...

  7. c语言练习题及答案)(1),c语言练习题(带详解答案)1.pdf

    c语言练习题(带详解答案)1 (-2) -1: 一单项选择题 /为求商运算符,该运算符能够对整型.字符.浮点等类型的数 据进行运算,5/2 2 1.(A )是构成C语言程序的基本单位. 11.如果 i ...

  8. python语言的格式框架_django框架模板语言使用方法详解

    本文实例讲述了django框架模板语言使用方法.分享给大家供大家参考,具体如下: 模板功能 作用:生成html界面内容,模版致力于界面如何显示,而不是程序逻辑.模板不仅仅是一个html文件,还包括了页 ...

  9. C语言再学习 -- 详解C++/C 面试题 2

    (经典)C语言测试:想成为嵌入式程序员应知道的0x10个基本问题. 参看:嵌入式程序员面试问题集锦 1.用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define ...

最新文章

  1. java文本编辑器 运行_能编译运行java的简单文本编辑器
  2. java ftp 连接超时时间_ftpClient的连接超时设置(setConnectTimeout,setSoTimeout) | 学步园...
  3. 2、赶去公司--网易2017春招
  4. SpringBoot2.1.5(18)--- 国际化配置,SpringBoot Locale 国际化使用方法
  5. python 树状图代码_Python 无限级分类树状结构生成算法 「实用代码」
  6. itext设置字体间距_汉语拼音的字体到底选哪个?你是不是一直很困扰?来看总结方法...
  7. opencv的lena项目,用android studio 3.6可以运行——drawable如何引入lena图片
  8. 实拍:丽江特色美食腊排骨火锅
  9. 小组取什么名字好_注册公司取什么名字好 八字起名大全
  10. 代码坏的味道17:狎昵关系 (Inappropriate Intimacy)
  11. Dominating Patterns UVALive - 4670 (ac自动机)
  12. kettle 6.1.0.1 mysql_kettle连接数据库报错:Error occured while trying to connect
  13. 中南大学邮箱客户端手动配置
  14. 生命科学计算机科学结合,生命科学与计算机科学的结合发展研究.docx
  15. JavaScript(WebAPI) (前端)
  16. 西安财经大学计算机考研科目,西安财经大学2020年硕士研究生考试复试科目与参考书目...
  17. 一开机checkingmedia_开机出现checkingmedia提示解决方法
  18. [思考] 程序员能靠纯技术渡过中年危机吗?
  19. 华米Q3财报超预期,智能穿戴设备接替手机狂奔?
  20. 解决debian xmms乱码

热门文章

  1. Go学习笔记(五)Go命令工具
  2. thinkphp5 mongodb Authentication failed
  3. mysql5.7与8.0密码加密方式
  4. “OLED显示屏”市场需求旺盛,各显示面板厂商纷纷加快产能布局
  5. 总结新GRE作文的写作和分析思路
  6. 2020产品经理薪资大起底
  7. 回馈粉丝:包邮 9 个手机
  8. 饭桶:10 人工神经网络
  9. php更改图片滤镜,php利用imagemagick实现复古老照片效果实例
  10. 关于计算机的英语手抄报,最新最全关于英语的手抄报唯美漂亮作品5张