C++-gdb调试常用功能

文章目录

      • 启动gdb
      • 运行程序
      • 设置断点
      • 运行控制
      • 查看源码
      • 查看信息
      • 查看变量
      • 线程相关

gdb调试常用功能如下,其中bin为要调试的程序,arg为参数

启动gdb

  • 启动调试 gdb bin
  • 带参数启动 gdb --args bin arg1 arg2
  • so预加载LD_PRELOAD=/path/to/lib.so && gdb bin

运行程序

  • r 开始运行程序
  • r arg1 arg2以参数启动程序

设置断点

  • crtl+C中断程序
  • b file.cpp:123 设置断点在file的123行
  • b main 设置断点在main函数
  • b ClassA::func 设置断点在类方法
  • b file.cpp:123 if n > 0 当n大于0时在该处停下
  • watch *(&(this->m_data)) 当m_data发生变化时,停止程序
  • watch *((bool*)0x5c16450) 当地址处sizeof(bool)大小的数据发生变化时,停止程序
  • watch *(T (*)[N])0x5c12345 当地址处开始的大小为N*sizeof(T)的数据发生变化时,停止程序,如果N太大似乎gdb会严重拖慢程序的运行速度
  • d 1 2 删除断点 1和2
  • d 删除所有断点
  • dis 1 2 禁用断点 1和2
  • en 1 2 启用断点 1和2
  • en b 启用所有断点

运行控制

  • unitil 123 运行到当前文件123行
  • s 单步调试
  • n 执行到下一行
  • 继续运行程序直到下一个断点
  • fin 结束当前函数栈,up以后fin,会送当前查看的调用栈结束
  • ret 直接返回,不执行当前函数栈剩余代码
  • j 123直接跳转到代码的123行,不恰当的jump可能导致崩溃

查看源码

  • list 查看源码
  • list - 向上查看源码
  • list file.cpp:123 查看指定文件指定行数
  • list func 查看函数定义
  • tui en/tui dis 用terminal ui的方式查看代码
    • focus cmd上下按钮和滚轮用于切换命令
    • focus src 上下按钮和滚轮用于查看代码
    • ctrl+L 刷新终端,有时候tui更新不够好乱码可以刷新下一下

查看信息

  • i b查看断点信息
  • show args 查看当前运行参数
  • up/down 查看调用栈上一层和下一层
  • bt 查看完整调用栈

查看变量

  • p var 查看变量
  • p &var 查看类型和地址
  • p arr[0]@10 查看数组0位置开始的10个元素
  • p a = b 执行代码,如赋值篡改变量,函数调用等等都可以
  • disp expr。自动打印变量,expr可以是上面这些内容,到相应断点处或者每次执行n时就打印一次expr,不恰当的disp可能导致崩溃。disp还可以用于赋值

线程相关

  • i threads 查看所有线程
  • show scheduler-locking查看当前线程调试模式
  • set scheduler-locking on 只运行当前线程
  • set scheduler-locking off 运行所有线程

参考:1. https://www.cnblogs.com/pugang/p/7698772.html

你可能感兴趣的:(C++,c++,windows,linux,gdb,调试)