C语言gdb调试详解
目录
一、gdb简介
二、gdb的安装
三、调试前的准备
四、基本调试命令
举个例子
五、其他命令
一、gdb简介
- GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具
- 对于一名Linux下工作的c/c++程序员,gdb是必不可少的工具
二、gdb的安装
CentOS系统中,用root用户登录服务器,执行以下命令安装或升级
yum -y install gdb
- 如果您的服务器没有安装gdb,以上命令就会安装最新版本的gdb,如果已经安装了gdb,就会更新到最新版本的gdb
- 安装gdb,前提条件是服务器必须接入互联网
三、调试前的准备
用gcc编译源程序的时候,编译后的可执行文件不会包含源程序代码,如果您打算编译后的程序可以被调试,编译的时候要加 -g 的参数
例如:
gcc -g -o 文件名 文件名.c
在命令提示符下输入gdb 加上你要调试的程序名就可以调试了
gdb 文件名
四、基本调试命令
命令 |
命令缩写 |
命令说明 |
set args |
|
|
break |
b |
|
run |
r |
|
next |
n |
|
step |
s |
|
|
p |
|
continue |
c |
|
set var name=value |
|
|
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行
- break(简写 b) :格式 b 行号,在某行设置断点
- info breakpoints :显示断点信息
- Num: 断点编号
- Disp:断点执行一次之后是否有效 (keep:有效 dis:无效)
- Enb: 当前断点是否有效 (y:有效 n:无效)
- Address:内存地址
- What:位置
run (简写 r) :运行程序直到遇到结束或者遇到断点等待下一个命令
使用 b r n p s 命令
五、其他命令
除了基本命令外,gdb 还有一些其他命令
- continue 简写 c :继续执行,到下一个断点处(或运行结束)
- until:当你厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体
- until+行号: 运行至某行,不仅仅用来跳出循环
- finish: 运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息
- call 函数(参数):调用程序中可见的函数,并传递“参数”
- delete 断点号n:删除第n个断点
- disable 断点号n:暂停第n个断点
- enable 断点号n:开启第n个断点
- clear 行号n:清除第n行的断点
- info b (info breakpoints) :显示当前程序的断点设置情况
- delete breakpoints:清除所有断点
- list 行号:将显示当前文件以“行号”为中心的前后10行代码,如:list 12
- list 函数名:将显示“函数名”所在函数的源代码,如:list main
- display 表达式:在单步运行时将非常有用,使用display命令设置一个表达式后,它将在每次单步进行指令后,紧接着输出被设置的表达式及值。如: display a
- watch 表达式:设置一个监视点,一旦被监视的“表达式”的值改变,gdb将强行终止正在被调试的程序。如: watch a
- whatis :查询变量或函数
- info function: 查询函数
- info locals: 显示当前堆栈页的所有变量
- where/bt :当前运行的堆栈列表;
- bt backtrace :显示当前调用堆栈
- up/down :改变堆栈显示的深度
- show args:查看设置好的参数
- info program: 来查看程序的是否在运行,进程号,被暂停的原因
- layout:用于分割窗口,可以一边查看代码,一边调试
- layout src:显示源代码窗口
- layout asm:显示反汇编窗口
- layout regs:显示源代码/反汇编和CPU寄存器窗口
- layout split:显示源代码和反汇编窗口
- Ctrl + L:刷新窗口
重点掌握基本命令就行,其他命令很多,可以自己去测试一下,了解一下即可,不用去死记硬背,看实际需求吧 ,命令这种东西用多了自然就熟悉了
C语言gdb调试详解相关推荐
- C语言中编译预处理命令作用,C语言预处理命令详解
原标题:C语言预处理命令详解 关注百问科技并将它设为星标 不错过任何一篇嵌入式干货 ------ 作者:clover_toeic 原文出处: https://www.cnblogs.com/clove ...
- 【排序】什么都能排的C语言qsort排序详解【超详细的宝藏级别教程】深度理解qsort排序
[排序]什么都能排的C语言qsort排序详解[超详细的宝藏级别教程]深度理解qsort排序 作者: @小小Programmer 这是我的主页:@小小Programmer 在食用这篇博客之前,博主在这里 ...
- C语言自定义类型详解
C语言自定义类型详解 一.结构体 1.结构的声明 2.特殊的声明 3.结构的自引用 4.结构体变量的定义和初始化 5.结构体内存对齐 6.修改默认对齐数 7.结构体传参 二.位段 1.什么是位段 2. ...
- (转)C语言位运算详解
地址:http://www.cnblogs.com/911/archive/2008/05/20/1203477.html C语言位运算详解 作者:911 说明:本文参考了http://www2.ts ...
- R语言基础知识详解及概括
R语言基础知识详解及概括 目录 R语言基础知识详解及概括 R数据可视化示例 R语言进行数据创建
- eclipse调试详解
eclipse调试详解 作者: 高州人家 来源: 网络转载 浏览: 1610 次 好评: 0分 [ 小 中 大 ] 2007-11-16 本地调试 Java 调试器具有客户机/服务器设计, ...
- c语言练习题及答案)(1),c语言练习题(带详解答案)1.pdf
c语言练习题(带详解答案)1 (-2) -1: 一单项选择题 /为求商运算符,该运算符能够对整型.字符.浮点等类型的数 据进行运算,5/2 2 1.(A )是构成C语言程序的基本单位. 11.如果 i ...
- python语言的格式框架_django框架模板语言使用方法详解
本文实例讲述了django框架模板语言使用方法.分享给大家供大家参考,具体如下: 模板功能 作用:生成html界面内容,模版致力于界面如何显示,而不是程序逻辑.模板不仅仅是一个html文件,还包括了页 ...
- C语言再学习 -- 详解C++/C 面试题 2
(经典)C语言测试:想成为嵌入式程序员应知道的0x10个基本问题. 参看:嵌入式程序员面试问题集锦 1.用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define ...
最新文章
- java文本编辑器 运行_能编译运行java的简单文本编辑器
- java ftp 连接超时时间_ftpClient的连接超时设置(setConnectTimeout,setSoTimeout) | 学步园...
- 2、赶去公司--网易2017春招
- SpringBoot2.1.5(18)--- 国际化配置,SpringBoot Locale 国际化使用方法
- python 树状图代码_Python 无限级分类树状结构生成算法 「实用代码」
- itext设置字体间距_汉语拼音的字体到底选哪个?你是不是一直很困扰?来看总结方法...
- opencv的lena项目,用android studio 3.6可以运行——drawable如何引入lena图片
- 实拍:丽江特色美食腊排骨火锅
- 小组取什么名字好_注册公司取什么名字好 八字起名大全
- 代码坏的味道17:狎昵关系 (Inappropriate Intimacy)
- Dominating Patterns UVALive - 4670 (ac自动机)
- kettle 6.1.0.1 mysql_kettle连接数据库报错:Error occured while trying to connect
- 中南大学邮箱客户端手动配置
- 生命科学计算机科学结合,生命科学与计算机科学的结合发展研究.docx
- JavaScript(WebAPI) (前端)
- 西安财经大学计算机考研科目,西安财经大学2020年硕士研究生考试复试科目与参考书目...
- 一开机checkingmedia_开机出现checkingmedia提示解决方法
- [思考] 程序员能靠纯技术渡过中年危机吗?
- 华米Q3财报超预期,智能穿戴设备接替手机狂奔?
- 解决debian xmms乱码