前言
正文
参考
基础命令
- 注意使用gcc编译程序的时候要使用-g的选项,才会是生成的可执行文件里面有行号,才可以进行操作。
- l :显示程序
- b num: 打断点
- i: info的意思
- i b: 代表显示出断点信息
- start :让程序启动,会开始跑到断点的那个地方
- n:next就是一步一步向后走,直接就执行完函数体了
- c: 就是continue 继续跑
- s: step进入到函数体的内部
- p: printf 表示的是打印某个变量
- ptype: 显示某个变量的类型
- start和run的区别:默认情况下,run 指令会一直执行程序,直到程序执行结束。如果程序中手动设置有断点,则 run 指令会执行程序至第一个断点处. start 指令会执行程序至 main() 主函数的起始位置,即在 main() 函数的第一行语句处停止执行(该行代码尚未执行)。
- file 文件名(绝对路径): 可以通过file命令指定要进行gdb调试的文件。
- –args: 指定需要传递给程序的数据
- set args: 可以借助 set args 命令指定目标调试程序启动所需要的数据
- run® 数据:可以使用run 或者start启动目标程序时,指定其所需要的数据。
- cd /tmp/demo :将 GDB 调试器的工作目录修改为 /tmp/demo
- path /temp/demo :某些场景中,目标调试程序的执行还需要临时修改 PATH 环境变量,此时就可以借助 path 指令
- run >a.txt: 通过run > 可以将运行的程序的输出结果输出到a.txt.
- watch cond: watch 称为监控断点,cond 表示要监控的变量
- catch event:建立捕捉断点的方式很简单
- catch 库的名称:监控库的加载(使用ldd App 可以获知其运行所需加载的动态库)
- break … if cond: 在某种条件下使断点发挥其作用。
- condition bnum expression:参数 bnum 用于代指目标断点的编号;参数 expression 表示为断点添加或修改的条件表达式。用于为 bnum 编号的断点添加或修改 expression 条件表达式
- condition bnum:用于删除 bnum 编号断点的条件表达式,使其变成普通的无条件断点
- ignore bnum count: 参数 bnum 为某个断点的编号;参数 count 用于指定该断点失效的次数。仅为一个整数,它用来表示该断点失效的次数
- next,step,until :都可以控制GDB调试器每次只执行一行代码。
- step next基本相同:但当step遇到函数时,会进入到函数内部,并在函数第一行代码处停下。
- until:不带参数的 until 命令,可以使 GDB 调试器快速运行完当前的循环体,并运行至循环体外停止。注意,until 命令并非任何情况下都会发挥这个作用,只有当执行至循环体尾部(最后一行代码)时,until 命令才会发生此作用。
- until location:location只是行号。
- finish:如果是在循环体内非最后一次循环,直接finish是出不来的。可以把循环的位置的断点去掉。就可以跳出函数体了。
- set var 变量名= 赋值:设置变量的值
- display 变量名:自动打印变量值,设置追踪变量
- undisplay:取消追踪变量
- info display:获取编号
- u: 跳出循环的命令
- quit:退出gdb