gdb调试

Linux中gdb调试。


一、背景知识

  • 程序发布方式有两种,debug模式和release模式。debug模式可以调试,release模式不可以调试。

  • 在debug模式下,编译器形成可执行程序时,会给程序添加调试信息。(验证:不同模式下, debug形成的可执行程序比release模式下形成的可执行程序大。即,添加的可调试信息)

  • 在Linux中,gcc/g++默认采用的是release模式。

  • 使用指令: gcc test.c -o test_debug.exe -g ——[-g]选项可使gcc以debug模式编译。

  • readelf -S 可执行程序 —— 读取可执行程序的符号表(汇编指令)。

  • readelf -S 可执行程序 | grep -i debug ——从可执行程序中找到有关debug关键字的信息、

  • readelf 可以读取elf格式的内容。可执行程序是elf 格式的,所以可以读取。

  • -i 是忽略大小写。

二、指令

  • test.cc 源文件, test_debug.exe 是可执行程序

  • gdb test_debug.exe —— 进入gdb调试

  • quit (q) —— 退出调试


list (l)  [文件名:]行号/函数名 

1. list test.cc:main ——查看文件main函数所在位置的源代码。

2. list test.cc:3 —— 查看文件的第3行源代码。
3. list(l) main —— 从main函数位置开始查看。

4. list(l) 0 —— 从文件起始位置开始查看。
  • list 默认只会打印10行,且要打印位置的源代码一般在中间位置,一直回车即可看到后面的全部代码。

  • 因为gdb 会记录最近一次运行的指令。


  • run ® —— 让程序跑起来,然后才可以调试。因为没有打断点,所以会直接把程序跑完。

  • break (b) [文件名]:行号/函数名 ——给文件的第几行打断点。(参考上面的list指令)

  • 断点是在查找问题时缩小范围用的。


info(i) b —— 显示所有的断点
  • info i —— 查看进程

  • ps ajx | grep gdb ——查看gdb的进程

  • info locals —— 查看当前栈帧局部变量(相当于VS中的查看自动变量)


delete breakpoints(d)—— 删除所有的断点。
  • delete breakpoints(d) n断点编号—— 删除断点编号为n的断点

    1. d 1 —— 删除断点编号为1的断点。
  • disable 断点编号 —— 禁用断点

  • enable 断点编号 —— 启用断点(与disable统称:使能断点。标识为:Enb,通过info b 可以看到)

  • next(n) —— 逐过程调试(F10)

  • step(s) —— 逐语句调试(F11)

  • finish —— 逐函数,前提是进入函数内部。将所在函数执行完毕就停下来。用于跳过循环。

  • continue© —— 从当前断点运行到下一个断点处。

  • print§ 变量名/地址 —— 打印变量的值或地址

  • display 变量名 —— 让变量一直显示

  • undisplay 编号 —— 取消变量一直显示

  • until X行号 —— 从当前位置运行到第X行。

  • set var i=100 —— 修改变量的值,如果是循环,中间的过程不会运行。

  • breaktrace(bt)——查看各级函数调用及参数。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值