Linux调试器-gdb使用

程序的开发过程

image-20231106112558759

debug和release

​ 程序的发布版本有debug和release版本,debug就是可被调试的(debug环境下程序可以进行调试),release是发行版本,测试人员和用户使用的版本。Linux下我们编译代码时默认是release版本,debug版本的程序相较于release多了调试信息,所以大小会更大一点

​ 想要以debug环境编译代码需要在编译命令后+-g,比如gcc code.c -g

​ 我们在Linux中形成的可执行程序格式是ELF格式。可以通过指令readelf -S [可执行程序]查看,debug版本的程序会多出一些信息。

image-20231106113656524

gdb的使用

​ gdb是Linux系统的调试器,用于调试代码,必须是debug版本形成的可执行程序才能被调试gdb会记录最近的历史命令,直接回车就是上一个命令

  • 开始调试

    • gdb [可执行程序]进入调试
    • r(run)开始调试
  • 退出

    • ctel + dq(quit)退出调试
  • 看代码

    • l(list) 行号跳转到对应行号,一次显示10行
    • l(list) [函数名]列出函数的源代码
  • 打断点/删断点

    • b [行号]在某一行打断点

    • b [文件名:行号]在文件的某一行打断点

    • b [文件名:函数名]对文件的某个函数打断点

    • b [函数名]对某个函数打断点

    • info b(break)查看断点信息,每一个断点都有一个编号

    • d [编号]删除某一个断点

    • enable [编号]/disable [编号]开启/关闭断点

  • 逐语句/逐过程

    • n(next)逐过程,就是VS的F10
    • s(step)逐语句,就是VS的F11
  • 查看变量

    • p [变量]打印变量值

      以下两个指令可以让想看的对象每运行一步都会打印出来

    • display [变量名/变量地址]可以常显示想看的对象

    • undisplay [编号]可以取消常显示编号所代表的对象

  • 其他

    • until运行至指定的位置(可能是指定位置的后面,因为指定的行可能是空行,会往后走找语句)
    • finish运行至当前函数的结尾
    • c从一个断点直接运行到下一个断点处(类似于VS的F5)
    • bt查看调用堆栈
    • set var [变量] = [值]在调试时更改变量的值
    • info locals查看当前栈帧局部变量的值

一个程序被调试的本质实际上是gdb在追踪这个进程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值