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 *[email protected] 打印从指针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命令退出