gdb常用调试命令

命令

  • gdb -p pid(pid可通过top命令查到)
  • b 函数名(通过函数名加断点)
  • b xxx 行号(通过行号加断点)
  • c (continue,断点后继续运行)
  • p 对象名(查看对象或数据结构参数)
  • gdb xxx.exe core.yyy (查看堆栈)
  • gdb 查看内存:格式: x /nfu
  • gdb启动服务:gdb --args xx.exe [-option]
  • set args 可指定运行时参数。(如:set args 10 20 30 40 50)
  • show args 命令可以查看设置好的运行参数。

gdb查看内存

  • 格式: x /nfu

  • 说明
    x 是 examine 的缩写
    n表示要显示的内存单元的个数
    f表示显示方式, 可取如下值
    x 按十六进制格式显示变量。
    d 按十进制格式显示变量。
    u 按十进制格式显示无符号整型。
    o 按八进制格式显示变量。
    t 按二进制格式显示变量。
    a 按十六进制格式显示变量。
    i 指令地址格式
    c 按字符格式显示变量。
    f 按浮点数格式显示变量。

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

堆栈

  • thread apply all bt

锁定当前线程

  • (锁定当前线程):set scheduler-locking off|on|step
  • (忽略信号):handle SIGSEGV nostop noprint pass

打印所有元素

  • set print element 0

查看栈是否溢出(coredump)

  • gdb xx.core 打印出死机的堆栈信息 执行 maintenance info sections (gdb进程时使用info proc mapping)列出core中栈的信息
  • 在线程执行开始的地方(这里堆栈靠上的位置,比如f0、f1可能已经出现越界,找线程执行开始的地方)执行 info reg 找到寄存器地址 64位的是rsp 32位的是esp
  • 根据寄存器地址找到对应的栈段,后减前即为线程对应的栈可用大小,在疑似越界的地方info reg查看寄存器地址可看出是否有越界
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值