Linux 调试 – gdb使用


背景

程序的发布方式有两种,debug模式和release模式,debug版本程序内会保存调试信息,容量会比release版本大,效率也会比release版本低。 程序发布到用户手里使用的都是release版本,编译器对其做了大量的优化,容量减小 效率提高。

Liunx gcc/g++ 编译出来的二进制程序,默认是release模式,需要加上-g 选项才能是debug版本。



常用操作

  • list / l 行号:显示源代码。
  • list / I 函数名:列出某个函数的源码。
  • run / r :运行程序。
  • s / step :进入函数调用
  • break / b 行号 : 在某行设置断点
  • info b (break) : 显示断点信息。
  • finish : 执行到当前函数返回,然后停止等待命令。
  • print / p : 打印当前表达式的值,通过表达式修改变量的值或调用函数。
  • p 变量 :打印变量值。
  • set var : 修改遍历值。
  • continue / c : 从当前位置开始执行,如果遇到断点停止。
  • delete breakpoints : 删除所以断点。
  • delete breakpoints n: 删除序号为n的断点。
  • display 变量名 :常显示一个变量,
  • undisplay : 取消显示变量。
  • until X 行号 : 跳至X行
  • breaktrace / bt : 查看各级函数调用及参数
  • info (i)locals :查看当期去那堆栈局部变量的值。
  • quit / q 退出gdb

调试

vim创建一个c文件,程序计算0到100的累加和,并打印。
在这里插入图片描述
在这里插入图片描述


gcc 创建debug 版本文件
在这里插入图片描述

输入list 0 显示源码,省下的未显示可以继续回车显示。
在这里插入图片描述
设置两个断点,使用 info b(break)可以查看断点
在这里插入图片描述
输入r(run),开始运行,到达第一个断点停下来。
在这里插入图片描述
此时输入n(next),单步向下执行。
在这里插入图片描述

用 p 查看变量值。
在这里插入图片描述

也可以display 变量名 设置常显示,undisplay 取消常显示。
在这里插入图片描述
c (continue) 直接执行到下一个断点处。
在这里插入图片描述

info b 查看断点,
在这里插入图片描述

此时修改源代码。
在这里插入图片描述

gdb开始调试,输入l main查看main函数
在这里插入图片描述

设置两个断点
在这里插入图片描述

d 编号 删除指定编号的断点
在这里插入图片描述
s (step) 进入函数 (相当于vs的逐语句运行,会进入函数体内部)
在这里插入图片描述

调试过程中输入r(run) 重新开始调试
在这里插入图片描述

此时在for循环,输入bt查看调用堆栈

在这里插入图片描述

使用 until 跳转任意位置。
在这里插入图片描述
finish

在这里插入图片描述
在main函数执行finish没有意义。
在这里插入图片描述

disable 断点 。此时开始调试遇到此断点不会停止。
在这里插入图片描述
enable
在这里插入图片描述
print
在这里插入图片描述

set var 修改 变量的值。
在这里插入图片描述
在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐