gdb调试学习

1. 隐藏gdb进入时的版本信息 gdb -q
2. gdb输出信息较多时、gdb会暂停输出、打印提示信息、关掉提示、可以使用
   set pagination off
   或者 set height 0

3. info functions 查看所有的函数列表
4. info functions thread* 查看所有以thread开头的函数列表
5. n 执行下一句代码
   s 进入自定义子函数

6. set step-mode ongdb进入库函数进行调试
7. 使用return或者finish 结束 子函数调试
   finish 子函数会继续执行完毕、并且输出返回值、然后等待下边的命令
   return 子函数不继续执行、直接返回
8. 可以使用 call 或者 print 直接调用函数执行
9. 打印函数堆栈信息 i(info) frame、使用frame n来选择函数堆栈、n是堆栈的层数
   也可以使用frame addr来选择函数堆栈帧、addr是函数堆栈地址

10. 可以使用 i registers 查看寄存器内容、
11. disassmeble func查看汇编代码 disassemble {funcname}可以查看指定函数的汇编代码
12. debug entry-values 设置为非0值、可以在正常的函数堆栈信息外输出尾调用的信息
13. 可以使用up n或者down n来向下或者向上选择函数堆栈信息、其中n是层数
14. b(break) 可以设置断点
    b Foo:foo 对namespace Foo中的foo函数设置断点、
    b (anonymous namespace)::bar 对匿名空间的bar函数设置断点
    b *0x400522 在指定地址设置断点
    b linenum 在指定行设置断点
    b file:linenum 指定文件第line行设置断点
15. save breakpoints file-name-to-save 保存断点
    source file-name-to-save  恢复保存的断点
    info breakpoints 查看断点信息
    tb 可以使断点只执行一次(执行完成后删除)
16. 断点忽略
(gdb) b 10
Breakpoint 2 at 0x100000f4e: file 5.c, line 10.
(gdb) ignore 2 3
Will ignore next 3 crossings of breakpoint 2.

17. 打印输出
    x/s &str 打印str的地址
    p sizeof(str) 打印str的长度
    打印大数组中的内容 p arr - 缺省打印200个元素
    set print elements num - 重新设置打印元素的个数 num0时、代表不做限制
    p arr[index]@num 打印从index开始的num个元素
    set print array-indexes on 打印数组下标

    bt 打印调用堆栈信息
    bt full 显示个函数的局部变量的值
    bt full n 从内向外显示n个堆栈及局部变量
    bt full -n 从外向内显示n个堆栈及局部变量
    info locals 只打印局部变量
    i files/ i target / i proc mapping 显示进程内存映射关系
    p 'a.c'::var 打印a.c 中的静态变量var
    ptype var 查看变量var的类型
    i variables var 查看变量var定义的地方

    x 打印内存的值
    n 输出单元个数
    f 输出格式
    u 一个单元的长度
    x/nfu 表示以f格式打印n个长度为u的单元
    l(list) 打印源代码行
    l - / l + 指定向前或者向后打印
    l 1,10 打印指定范围的代码
    set print pretty on - 设置以比较友好的方式打印复杂数据结构
    x 会把最后检查的内存地址放在 $_ 变量中、把这个地址的内容放在 $__ 中

    run 需要先设置断点、然后它会在断点处停止
    start是从函数入口、一步步往下走

    调试已运行的进程:
    1. gdb -programe pid
    2. 先进入gdb、然后 使用attach a pid
       想结束调试的时候使用 detach
    3. 调试子进程
       在调试多进程时、gdb会默认追踪父进程、
       set follow-fork-mode child 可以追踪子进程
       set detach-on-fork off 可以同时调试父子进程、在调试一个进程的时候另一个进程挂起
    4. i threads 查看所有的线程信息
    5. i threads 1 打印线程1的信息
18. signal signame - 给程序发送信号

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值