GDB调试工具的使用

GDB(GNU Project debugger)是linux下和程序调试工具,主要用于用户态程序。具有VC等IDE工具提供的调试功能,能够执行单步跟踪、设置断点、查看变量等操作。使用GDB还可以对运行中的线程、多线程进行调试。
操作步骤如下:
一、启动GDB 有以下几种启动方式:
1、以gdb启动可执行文件 


2、运行程序后,单独启动gdb,在gdb中挂载进程

二、执行gdb命令进行调试
如果是以第1种方式启动,a.out是没有运行的,需要执行run命令运行程序。
第2种方式则不需要,在进入gdb模式前程序已经运行,当前程序为暂停状态。

刚介绍了run命令运行程序,如果程序带有参数,可以在run后加入,如: run a b c d
执行完该命令后,程序会立即运行,直到程序结束或断点处,所以在执行前需要事先设置后断点。

help:查看gdb命令帮助,如:help run
list命令:简写l,查看当前文件当前位置后续10的源代码。list -表示查看当前位置前面10行的内容。
            list 1  查看当前文件第1行左右的内容,一般为前后各5行
            list main 查看main函数前10的内容
            list main.c:10  查看main.c文件第10行左右的内容,一般为前后各5行
break命令: 简写b,设置断点,可以以某个函数为断点,也可以指定某一文件的行数
            b main    在main函数入口处设置断点
            b main.c:46  在main函数第46行设置断点
            b fun threads 10  在线程10中的fun函数设置断点
            b if a>0  当变量a的值大于0时中断
info命令:简写i,查看配置,可用于查看断点、监视、线程等信息
            info break  查看所有断点
            info threads  查看所有线程
delete命令:删除配置,可用于删除断点、监视
            delete breakpoints 1  删除断点1
display命令:每次中断时打印指定内容
            display a  每当单步执行或运行到断点时,打印变量a的值
print命令:简写p,手动打印指定内容
            print a  打印变量a的内容,a可以是结构体变量、数组变量
            p/x a    以16进制打印变量a
            p *a@10  打印从指针a指向的地址开始,长度为10的数据
attach命令:挂载进程
            attach 6666  挂载进程ID为6666的进程
detack命令:卸载进程
            detack 卸载之前挂载的进程
call命令:手动调用指定函数
            call fun  手动调用fun函数
step命令:简写s,单步执行,遇到函数跳转到函数内部
next命令:简写n,执行下一行代码,遇到函数不跳转到函数内部
continue命令:简写c,继续执行,直到断点或者结束时停止。
quit命令:退出GDB调试

如:


除了上述基本调试命令外,还可以边调试边打开源码看,这需要编译时打开debug选项


设置断点及运行程序后,执行layout src


结果如下:


在该界面可以执行前面说的调试命令:


layout命令:
            layout src 切换到源码窗口
            layout asm 切换到汇编窗口
            layout split 同时显示源码和汇编窗口
            layout next 切换下一个窗口
            layout pre   切换上一个窗口

使用Ctrl+x,接着按a退出layout模式 


三、结束调试
执行quit命令退出


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值