GDB命令详解

GDB命令详解

启动选项

  • -cd:设置工作目录
  • -q:安静模式,不打印介绍信息和版本信息
  • -d:添加文件查找路径
  • -x:从指定文件中执行GDB指令
  • -s:设置读取的符号表文件

基础命令

命令 简写 gdb功能 使用方法及备注
list l 列出源代码 每次接着上次的位置往下列,每次列10行;后接参数表示列出以参数位置为中心上下10行代码
run r 运行 调试开始
break b 设置断点 b 断点处
delete d 删除断点 delete断点编号
disable disable 禁用断点 disable断点编号
info i 查看信息 查看断点i b,等后面详细列举
print p 打印变量 打印变量,后面详细介绍
display d 打印变量 在每次程序暂停时打印变量
x x 显示内存 x 0x1234567,后面详细介绍
frame f 查看栈帧 查看某个指定栈帧
backtrace bt,where 查看栈帧 bt N显示开头N个栈帧, bt -N最后N个栈帧
set set 改变变量值 set variable <变量> = <表达式>;比如 set var test=3
next n 执行下一行 n;执行到下一行,不管下一行多复杂
step s 执行下一行 s;若下一行为函数,则进入函数内部
continue c 继续 c为继续的次数,可省略,表示继续一次
finish fi 执行到当前函数结束 执行完成当前函数
until u 执行到当前代码块结束 执行完成代码块

列出源代码:list命令

设置断点:break命令

break命令

在指定位置设置断点,命令格式:

(gdb) b position

断点位置position可以使用“行号”“函数名称”“执行地址“等方式指定,如下:

(gdb) b <行号>
(gdb) b <函数名称>
(gdb) b <函数名称>
(gdb) b <代码地址> 

对应的实例:

(gdb) b 8
(gdb) b main
(gdb) b *main
(gdb) b *0x804835c

其中,在函数名称前面加“*”符号表示将断点设置在“由编译器生成的prolog代码处”。

查看指令:info命令

(gdb) info args:查看当前函数的参数及其值
(gdb) info line:查看源代码在内存中地址,可以跟行号、函数名
(gdb) info locals:显示当前函数的局部变量
(gdb) info symbol:显示全局变量信息
(gdb) info function:显示所有函数名称
(gdb) info thread:查看线程信息
(gdb) info registers:列举寄存器值

打印变量:print和display命令

print命令

print支持格式化输出,命令格式:

(gdb) p/format variable

支持的format参数格式如下:

格式 说明
x 显示为16进制
d 显示为10进制
u 显示为无符号10进制
o 显示为8进制
t 显示为2进制数,t表示two
a 地址
c 显示为字符
f 浮点小数
s 显示为字符串
打印数组

数组变量或地址后加@数组长度

(gdb) p array@4
$35 = {0x1, 0x2, 0x3, 0x4}

打印长度为8的字符数组

(gdb) p *(char *)array@8

display命令

命令格式和print相同,但display命令会在每次程序暂停时(例如单步执行)自动打印出来。

x命令:查看内存

命令格式:

(gdb) x/NFU address

参数格式:

格式 说明
N 后面FU重复次数
F x(16进制)、c(字符)、s(字符串)、a(地址) 、d(十进制)、i(汇编)、t(二进制)
U b(字节)、h(2字节) 、w(4字节)、g(8字节)

查看栈帧:frame命令和backtrace命令

frame命令

根据栈帧编号或者栈帧地址,打印指定栈帧信息,命令格式:

(gdb) frame spec

该命令可以将 spec 参数指定的栈帧选定为当前栈帧。spec 参数的值,常用的指定方法有 3 种:

  1. 通过栈帧的编号指定。0 为当前被调用函数对应的栈帧号,最大编号的栈帧对应的函数通常就是 main() 主函数。
  2. 借助栈帧的地址指定。栈帧地址可以通过 info frame 命令(后续会讲)打印出的信息中看到。
  3. 通过函数的函数名指定。注意,如果是类似递归函数,其对应多个栈帧的话,通过此方法指定的是编号最小的那个栈帧。

backtrace命令

打印栈帧信息,命令格式:

(gdb) backtrace [-full] [n]

参数格式:

  • -full:打印栈帧信息的同时,打印出局部变量的值。
  • n:一个整数值。当为正整数时,表示打印最里层的 n 个栈帧的信息;n 为负整数时,那么表示打印最外层 n 个栈帧的信息。

参考

[1] gdb使用详细介绍: https://blog.csdn.net/weixin_37921201/article/details/120117096

[2] gdb命令: http://lnmp.ailinux.net/gdb

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇