linux gdb 代码调试工具

152 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

学习资料

gdb 使用

可能需要安装 gdb。可以 使用 Tab 命令或变量自动补齐

  1. 启动 gdb

    gdb
    file 可执行文件
    

    gdb 可执行文件
    
  2. 运行程序 r

    run 或简写 r
    
  3. 退出 gdb

    quit 或简写 q
    
  4. 打断点 b

    break 函数名  或简写 b 函数名
    
    break 文件名:行号 或简写 b 文件名:行号
    
  5. 正则打断点 rb

    rbreak regex 符合正则表达式的函数开头都会被打上断点
    
  6. 条件断点

    break [文件名:]行号 条件
    如:b 55 if a > 3  如果 a > 3 ,则在当前文件第 55 行断点
    
  7. 显示所有断点 i b

    info breakpoints 或简写 i b
    
  8. 删除断点 d

    删除所有断点:delete 或简写 d
    删除指定断点:delete 断点序号(可通过 i b 查看到),或简写 d 断点序号
    
  9. 显示接下来要执行的代码 l

    list 或简写 l
    如果显示不够长,可继续按 l
    
  10. 下一步,不进入函数 n

    next 或简写 n
    
  11. 下一步,进入函数 s

    step 或简写 s
    
  12. 打印变量值 p

    print 变量或函数或数组或元素等,print 可简写为 p
    举例:
    print main  # 打印main函数地址信息
    p array  # 打印数组
    p array[3] # 打印元素
    
  13. 观察变量值变化

    watch 变量名,如果变量值发生变化则断点自动到此位置,并打印变量前后的值。如下:
    
    Hardware watchpoint 2: total_passed                                                                                                               │
                                                                                                                                                      │
    Old value = 0                                                                                                                                     │
    New value = 3                                                                                                                                     │
    TestEnumLayers (total=@0x7fffffffdcbc: 3, passed=@0x7fffffffdcb8: 3, skipped=@0x7fffffffdcb4: 0, failed=@0x7fffffffdcb0: 0) at /home/kali/OpenXR-S│
    DK-Source/src/tests/loader_test/loader_test.cpp:320                                                                                               │
    320         failed += local_failed;
    
  14. 查看寄存器 i r

    info register 或简写 i r
    

参考