GDB --- linux调试工具介绍

来源:互联网 发布:怎么管理mac下面的图标 编辑:程序博客网 时间:2024/05/22 15:01

GDB

GDB是一套字符界面的程序集,可以用它在linux上调试c和c++程序,它提供了以下的功能:
1. 在程序中设置断点,当程序运行到断点处暂停
2. 显示变量的值,可以打印或者监视某个变量,将某个变量的值显示出来
3. 单步执行
4. 运行时修改变量的值
5. 跟踪路径
6. 线程切换

1、 前提条件: 要使用gdb,在用gcc编译时,需要加上 -g,gcc会向程序中插入一下信息,作为gdb调试时的铺垫,然后gdb才能够利用这些铺垫和信息与程序交互,并且调试时,如果想展示源代码,需要将源代码放在同样的路径

2、 进入gdb:
a. 直接输入gdb -> 用 file命令加载要调试的程序
b. 命令: gdb 程序名

3、 调试命令:

start -> 启动程序,gdb停在main函数中变量定义之后的第一条语句处等待我们发命令set args 参数值1 参数值2 -> 设置输入参数list 行号 -> 显示行号周围的源程序: list 开始行号, 结束行号 -> 选择区间来打印  list 函数名 -> 显示函数名对应的源代码  list - 10 -> 显示第10行前面的源代码bt -> 查看各级函数调用及参数(backtrace) f 栈帧编号 -> 选择栈帧,然后在执行info locals查看函数中的局部变量值b 位置 -> 设置断点run 参数 -> 运行程序,运行程序的参数display 变量名  -> 显示变量c -> 继续运行程序q -> 退出GDBp 变量名 -> 打印变量的值设置条件断点 : b 44 if i == 2delete (delete 断点编号) -> 删除断点whatis 或者 ptype (whatis i) -> 显示变量的类型s -> 单步跟踪进入 step inton -> 单步跟踪 step overctrl + x + a -> 切换子程序examine -> 查看内容地址中的值  x/<n/f/u> <addr> -> n: 正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容; f: 显示的格式; u: 从当前地址往后请求的字节数,默认4字节watch <expr> -> 观察某个表达式/变量的值是否有变化 (watch i) -> 执行执行 c 才会有效果set -> 修改寄存器或者内存 set $rbx=0x0000021000 set {unsigned int }0x0000021000=0x0jump -> 跳到对应的行执行程序 jump <linespec> 注意:jump命令不会改变当前的程序栈中的内容,所以,如果使用jump从一个函数跳转到另一个函数,当跳转到的函数运行完返回,进出栈操作时必然会发生错误。signal -> 产生一个信号量给被调试的程序,如中断信号 ctrl + c , signal <signal> 系统信号量通常从115return -> 如果在函数中设置了调试断点,在断点后还有语句没有执行完,可以使用return命令强制函数忽略还没有执行的语句并返回。return <expression> : 该表达式的值会被作为函数的返回值call <expr> -> 强制调用某函数,会显示函数的返回值 call add(1, 3)info  -> 可以在调试时查看寄存器、断点、观察点和信号等信息。info registers -> 查看除了浮点寄存器以外的寄存器  info all-registers -> 查看所有寄存器,包括浮点寄存器  info registers <regname...> -> 查看所指定的寄存器  info break -> 查看断点信息  info watchpoints -> 查看所有观察点  info signals -> 有哪些信号被GDB检测 info handle ; info line -> 查看源代码在内存中的地址 info threads -> 查看多线程  info line 后面可以跟行号、函数名、文件名 -> 源码所在的内存地址  info locals -> 查看函数内局部变量的值disassemble -> 用于反汇编,被用来查看当前执行时的源代码的机器码  disassemble add
原创粉丝点击