gdb调试命令大全

基本命令

#gdb test test是要调试的程序,由gcc test.c -g -o test生成。进入后提示符变为(gdb) 。

start : 指令会执行程序至main() 主函数的起始位置,即在main() 函数的第一行语句处停止执行(该行代码尚未执行)

continue : 从断点位置继续运行

r(un) : 指令会一直执行程序,直到执行结束。 如果程序中手动设置有断点,则run 指令会执行程序至第一个断点处。在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符(<和>)和shell通配符(*、?、[、])在内。

n(ext) : 单步运行,逐过程调试C 代码Style

s(tep) : 单步运行,逐语句调试,C Style

n(ext)i : 单步运行,逐过程调试汇编代码

s(tep)i : 单步运行,逐语句调试汇编代码,si/s 都可以

finish : 如果已经进入了某函数,而想退出该函数返回到它的调用函数中,可使用命令finish

until : 结束当前循环

whatis : 显示变量或函数类型

quit : 退出gdb

file tools/system : 添加sourceMap文件tools/system

directory /Users/Linux/Linux-0.11-on-mac: 指定源码路径"/Users/Linux/Linux-0.11-on-mac "

source a 应用gdb命令脚本 a,可以在脚本中添加一系列断点,避免每次调试都需要设置这些断点。更多参考

断点

info b 查看断点,information break的缩写

break n 在n行处设置断点

tbreak n/ tbreak func 设置临时断点,到达n行或函数func 后被自动删除

break main.c:10  在main.c文件第10行设置断点

break 0x3400a   在内存0x3400a处设置断点

break 10 if i==3  设置条件断点,在循环中使用非常方便

clear 10    清除第10行的断点,清除时GDB会给出提示

delete 3    对第10行 清除断点和自动显示的表达式的命令,清除时GDB不会给出任何提示

disable/enable 3  让所设断点暂时 关闭/开启,如果要让多个编号处的断点失效/使能,可将编号之间用空格隔开

awatch/watch i   设置一个观察点,当变量i 被读出或写入时程序被暂停

rwatch i      设置一个观察点,当变量i 被读出时,程序被暂停

查看源代码

list :简记为 l ,其作用就是列出程序的源代码,默认每次显示10行。

list 12:将显示当前文件以"12行"为中心的前后10行代码,

list main:将显示"main"所在函数的源代码,

查看运行信息

info program :查看程序的是否在运行,进程号,被暂停的原因。

p i 显示变量值i,在程序暂停时,键入"p 变量名"(print)即可,GDB在显示变量值时都会在对应值之前加上"N"标记,它是当前变量值的引用标记,以后若想再次引用此变量,就可以直接写作"N",而无需写冗长的变量名;

display 查看变量或表达式的值,例如: display /x i,以16进制显示变量i的值。它与print的区别是,每当程序暂停执行(例如单步执行)时,GDB 调试器都会自动帮我们打印出来,而 print 命令则不会。 参考

watch i 观察变量,在某一循环处,往往希望能够观察一个变量的变化情况,这时就可以键入命令"watch"来观察变量的变化情况,GDB在"n"设置了观察点;

i register 打印寄存器的值,输出不包括浮点寄存器和向量寄存器的内容

i all-registers 输出所有寄存器的内容

i registers eax"或者"p $eax 打印eax寄存器的值, 参考

where/bt :当前运行的堆栈列表

bt /backtrace/info stack :显示当前调用堆栈

bt full :查看完整的调用堆栈信息,包括每个栈帧中所有变量和参数的信息。

up/down :改变堆栈显示的深度

set args :指定运行时的参数

set args [arguments] :传递命令行参数

show args :查看设置好的参数

gdb查看内存数据

格式: x /nfu 例如: x /20xh 0x7fffffffe080

说明:

x 是 examine 的缩写,意思是检查。

n表示要显示的内存单元的个数,比如:20

f表示显示方式, 可取如下值:

cpp 复制代码
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
i 指令地址格式
c 按字符格式显示变量。
f 按浮点数格式显示变量。

u表示一个地址单元的长度:

cpp 复制代码
b表示单字节,
h表示双字节,
w表示四字节,
g表示八字节

layout

(gdb) layout src 显示源代码窗口

(gdb) layout regs 显示寄存器窗口

(gdb) layout asm 显示汇编代码窗口

(gdb) layout split 显示源代码和汇编代码

info win 显示窗口的大小

layout next 切换到下一个布局模式

layout prev 切换到上一个布局模式

focus cmd/src/asm/regs/next/prev 切换当前窗口

refresh 刷新所有窗口

update 更新源代码窗口和当前执行点

相关推荐
craybb4 天前
mdb转gdb实现过程介绍(2)三种方式实现GDB数据库的读、写,并将实现方式与ArcGIS环境共存配置
python·开源·gdb·格式转换·gdal
WineMonk5 天前
.NET C# 使用GDAL将mdb转换gdb数据
c#·.net·gis·gdb·gdal·mdb
半斗米5 天前
VSCode + GDB + J-Link 单片机程序调试实践
vscode·单片机·mcu·gdb·嵌入式系统·调试·j-link
Sarapines Programmer3 个月前
【GDB调试技巧】提高gdb的调试效率
linux·gdb·调试技巧·断点·变量监视
下课后泡实验室4 个月前
【Linux的 yum_vim工具篇】
linux·笔记·vim·gdb·gcc/g++·静动态链接和静动态库·make/makefile
沧海归城4 个月前
Linux_开发工具_yum_vim_gcc/g++_gdb_make/makefile_进度条_git_2
linux·git·vim·makefile·gdb·gcc·yum
Hi202402174 个月前
以调试ffmpeg为例,演示gdb如何定位内存被修改
ffmpeg·gdb
自律即自由w4 个月前
linux gdb 调试工具
linux·运维·服务器·gdb
炫酷的伊莉娜5 个月前
【Linux】Linux开发工具(yum、gdb、git)详解
linux·git·gdb·yum