GDB基础知识
GDB 基础知识
一、简介
GDB, 是 The GNU Project Debugger 的缩写, 是 Linux 下功能全面的调试工具。
GDB 支持断点、单步执行、打印变量、观察变量、查看寄存器、查看堆栈等调试手段。
在 Linux 环境软件开发中,GDB 是主要的调试工具,用来调试 C 和 C++ 程序。
支持命令补全功能
任何时候都可以使用 TAB 进行补全,如果只有一个待选选项则直接补全;否则会列出可选选项,继续键入命令,同时结合 TAB 即可快速输入命令。
GDB 的调用与退出
调用:
gdb 程序
注意:要调试程序,需要在 gcc 编译可执行程序时加上 -g 参数,首先我们编译程序,生成可执行文件
示例:
- 新建一个目录test
- 随意写一个C程序
xxx.c
- 编译
gcc xxx.c -o xxx -g
- 开始调试
gdb xxx
命令:
gcc xxx.c -o xxx -g // 编译xxx.c源文件,生成xxx可执行文件
gdb xxx // 启动gdb程序进行调试
退出:
quit
或者
exit
也可以快捷键Ctrl-d
退出
二、GDB 的基本指令
指令 | 说明 |
---|---|
run/r | 运行程序 |
break/b | 设置断点 |
info breakpoints | 查看断点信息 |
delete | 删除断点 |
disable | 关闭断点 |
enable | 启用断点 |
如果要在 GDB 中使用外部的 shell 指令
! 指令
例子(使用 ls 查看):
! ls
1. run/r
说明:这个命令将会执行你调试的程序,如果遇到断点将停下来等待新的命令输入
使用方法(gdb程序已经启动):
(gdb) run
或者
(gdb) r
2. break/b
说明:
- break line
在当前活动源文件line行处设置断点,
例如(在当前活动源文件的12行处设置断点):
(gdb) break 12
- break function
在函数function()的入口处设置断点,
例如(在main()函数的入口处设置断点):
(gdb) break main
除此之外,还可以是当前工作目录下的其他源文件代码
- break filename:line/function
假设当前活动源文件的同级目录下有一个名为hi.c的文件(要在该文件第6行设置断点):
(gdb) break hi.c:6
同上(要求在该文件main函数处设置断点):
(gdb) break hi.c:main
注意:如果不是当前工作目录下的源文件需要给出目标文件filename的相对路径或绝对路径
例如(目录test下):
test|
- xxx.c
- set|
- a.c
命令:
gcc xxx.c -o xxx -g // 编译xxx.c源文件,生成xxx可执行文件
gdb xxx // 启动gdb程序进行调试
进入到GDB调试后,设置a.c中main函数的断点:
(gdb) break set/a.c:main
3. info breakpoints
设置一个断点:
(gdb) break main
随后
(gdb) info breakpoints
显示以下内容:
(gdb) info breakpoints
Num Type Disp Enb Address What
1 breakpoint keep y 0x000000000040052e in main at xxx.c:7
其中每一项的信息:
- Num 代表断点编号,该编号可以作为 delete/enable/disable 等控制断点命令的参数
- Type 代表断点类型,一般为 breakpoint
- Disp 代表断点选中后状态,断点状态有保留(keep)、删除(del)、关闭(dis)
- Enb 代表该断点是否启用 enable(y) 或 disable(n)
- Address 代表该断点处虚拟内存的地址
- What 代表该断点在源文件中的信息
4. delete
使用说明,需要结合 info breakpoints
中的断点编号
- delete Num
注意:如果不带参数,直接使用默认全部删除
如果是多个选中可以使用空格:
(gdb) delete 1 3
选择断点编号为1和3的断点
5. disable 与 enable
disable
命令和 enable
命令的使用同样结合 info breakpoints
中的断点编号,与 delete
一样
使用后,作用于info breakpoints
中的 Enb
指令 | Enb |
---|---|
disable | n |
enable | y |
三、自我学习:help
这个可以说对学习GDB最为重要的命令
在外部
注意:目前没有调用 gdb 程序,不在其中
使用命令:
gdb --help
得到 GDB 这个工具的信息(建议亲试)
在 gdb 程序内部
注意:已经在 gdb 程序中
获取所有命令的列表
(gdb) help all
获取指定命令的信息说明
格式:help command
例如(查看 run
):
(gdb) help run
得到帮助文档:
Start debugged program. You may specify arguments to give it.
Args may include "*", or "[...]"; they are expanded using "sh".
Input and output redirection with ">", "<", or ">>" are also allowed.
With no arguments, uses arguments last specified (with "run" or "set args").
To cancel previous arguments and run with no arguments,
use "set args" without arguments.
其他命令使用方法相同
搜索某一词汇的相关指令
格式:apropos word
例如(查看 run
):
(gdb) apropos run
得到帮助文档:
! -- Execute the rest of the line as a shell command
attach -- Attach to a process or file outside of GDB
file -- Use FILE as program to be debugged
info proc -- Show /proc process information about any running process
interrupt -- Interrupt the execution of the debugged program
load -- Dynamically load FILE into the running program
make -- Run the ``make'' program using the rest of the line as arguments
r -- Start debugged program
rc -- Continue program being debugged but run it in reverse
reverse-continue -- Continue program being debugged but run it in reverse
run -- Start debugged program
running -- Running the program
set annotate -- Set annotation_level
set auto-connect-native-target -- Set whether GDB may automatically connect to the native target
set charset -- Set the host and target character sets
set circular-trace-buffer -- Set target's use of circular trace buffer
set debug infrun -- Set inferior debugging
set disable-randomization -- Set disabling of debuggee's virtual address space randomization
set disconnected-tracing -- Set whether tracing continues after GDB disconnects
set environment -- Set environment variable value to give the program
set exec-wrapper -- Set a wrapper for running programs
相信最后的 help 已经够大家自动提高了 !
GDB基础知识的更多相关文章
- 【分享】4412开发板-嵌入式Linux开发须要掌握的基础知识和技能
本文转自迅为电子论坛:http://www.topeetboard.com 1.Linux 基础 安装Linux操作系统 Linux文件系统 Linux经常使用命令 Linux启动过程具体解释 熟悉L ...
- 韩天峰博客 php基础知识学习记录
http://rango.swoole.com 写好PHP代码真的不容易,给大家几个建议: 慎用全局变量,全局变量不好管理的,会导致你的代码依赖于全局变量,而耦合度太高. 一定不要复制粘贴代码,可重用 ...
- 1)Linux程序设计入门--基础知识
)Linux程序设计入门--基础知识 Linux下C语言编程基础知识 前言: 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将 会学到以下内容: 源程序编译 Makef ...
- (转)Linux基础知识学习
Linux基础知识学习 原文:http://blog.csdn.net/ye_wei_yang/article/details/52777499 一.Linux的磁盘分区及目录 Linux的配置是通过 ...
- 嵌入式Linux基础知识
一.构建嵌入式开发环境 1.编译bootloader并烧写到板子中---uboot, 可以自己定制bootloader and logo 2.编译file system 并烧写--内嵌APP 3.编译 ...
- [转帖]linux基础知识大纲
linux基础知识大纲 https://blog.csdn.net/CSDN___LYY/article/details/80810403 1.Linux操作系统概述Linux操作系统的发展过程.创始 ...
- [转] linux操作系统下c语言编程入门--基础知识
点击阅读原文 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将会学到以下内容: 1. 源程序编译 2. Makefile的编写 3. 程序库 ...
- .NET面试题系列[1] - .NET框架基础知识(1)
很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...
- RabbitMQ基础知识
RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...
随机推荐
- centos配置 显示中文
目录 一.简介 二.操作 一.简介 不显示中文,出现这个情况一般是由于没有安装中文语言包,或者设置的默认语言有问题导致的. 二.操作 1.查看当前系统语言 登陆linux系统打开操作终端之后,输入 e ...
- Game On Serverless:SAE 助力广州小迈提升微服务研发效能
作者:洛浩 小迈于 2015 年 1 月成立,是一家致力以数字化领先为优势,实现业务高质量自增长的移动互联网科技公司.始终坚持以用户价值为中心,以数据为驱动,为用户开发丰富的工具应用.休闲游戏.益智. ...
- 优化器统计跟踪(SYS.EXP_HEAD$ SYS.EXP_OBJ$ SYS.EXP_STAT$不)导致表空间 SYSAUX不断增长
资料来自support文档 ID 2354960.1 环境: aws rds 19c(亚马逊云oracle 数据库) 背景: 在一次查看数据库表段的占用空间大小的时候,无意间发现其中EXP_开头的表占 ...
- SP1798 ASSIST - Assistance Required 题解
Content 有一个足够长的数列 \(a\),是一个首项为 \(2\),公差为 \(1\) 的等差递增数列.另有一个初始为空的数列 \(b\). 重复进行如下操作: 假设当前数列 \(a\) 第一项 ...
- CF23A You're Given a String... 题解
Content 给定一个长度为 \(n\) 的字符串,求出至少出现两次的最长子串的长度. 数据范围:\(1\leqslant n\leqslant 100\). Solution 我们直接暴力求出每个 ...
- Centos 配置服务器
Centos 配置服务器 (配置服务器 除了Git Bash Here 还可以安装Xshell 网址:https://xshell.en.softonic.com/ Wincp 网址:https: ...
- JAVA结合WebSocket实现简单客服聊天功能
说明:该示例只简单的实现了客服聊天功能. 1.聊天记录没有保存到数据库中,一旦服务重启,消息记录将会没有,如果需要保存到数据库中,可以扩展 2.页面样式用的网上模板,样式可以自己进行修改 3.只能由用 ...
- Nacos配置中心+ASP.NET Core
Nacos配置中心 nacos 是一个构建云原生应用的动态服务发现.配置管理和服务管理平台.. 源码已上传至 github 配置管理 asp.net core中所有的配置项,如appsetting.j ...
- 【LeetCode】748. Shortest Completing Word 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- D. Substring
D. Substring 题意: 给你一个有向图,然后给你一串字符串第i个点的值为第i个字符,然后给你m条有向边,从中找一条路径然后这条路径中点的值相同的个数的最大值,如果图有环输出-1. 思路: 拓 ...