GDB调试工具全方位记录

4 篇文章 0 订阅

简介

面试官挺喜欢GDB的,好好学学吧。

入门

编译时 任意处加上 -g 可以创建GDB symbol,从而用GDB调试

g++ file.c -g -o file

显示

栈帧与变量

bt # 显示栈帧
bt full # 显示栈帧与局部变量

在这里插入图片描述

p symbol # 查看本地变量

在这里插入图片描述

显示源文件

l # 打印十行源文件,多次使用则往下走
l 20 # 打印源文件15-24行
l main # 打印main函数前后五行的源代码

查看内存

x/[n][f][u] <addr>
  • x : examine 的缩写

  • n : 要显示的内存单元的个数

  • f : 显示方式,
    x 按十六进制格式显示变量。
    d 按十进制格式显示变量。
    u 按十进制格式显示无符号整型。
    o 按八进制格式显示变量。
    t 按二进制格式显示变量。
    a 按十六进制格式显示变量。
    i 指令地址格式 (x/30i可以打印三十条汇编)
    c 按字符格式显示变量。
    f 按浮点数格式显示变量。

  • u : 地址单元的长度
    b表示单字节,
    h表示双字节,
    w表示四字节,
    g表示八字节

  • <addr>代表的是起始内存,可以是寄存器比如$fp
    在这里插入图片描述
    如图打印了AArch64架构中的帧指针寄存器的十个8字节的内存单元

查看当前位置

where

在这里插入图片描述

查看内存

断点与调试

断点类型

break (b) main # 函数断点 
break 5 # 行号断点
break *0x123456 # 内存地址断点

断点操作

info breakpoints # 显示当前断点

delete/disable/enable 2#  断点删除/禁用/启用
ignore 2 11 # 跳过某断点

单步调试

  • next / nexti
    next (n=1) 向前走一行源文件,会进入函数
    nexti 向前走一行汇编,会进入函数
  • step / stepi
    step 向前走一行源文件,不会进入函数
    stepi 向前走一行汇编,不会进入函数

展示表达式

display (i*10+1) # 断点固定展示表达式值

汇编

  • p $rsp 打印栈顶的地址(Arm则为p $sp)
  • disas 当场反汇编,展示xx行汇编代码

多线程

  • 展示所有线程
    info threads
  • 单线程运行
    set scheduler-locking on

远程调试

其它

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值