03-GDB

GDB是一套字符界面的程序集,可以使用命令gdb加载要调试的程序。要使用GDB进行调试,在编译程序的时候需要加入-g选项。

使用GDB调试程序

加载程序

使用GDB调试程序时,需要先将程序加载到GDB中,加载程序的命令格式:

gdb 要调试的文件名

如果在启动GDB的时候没有选择程序名称,可以在GDB启动后使用“file + 要调试的文件名”的方法启动。

设置输入参数

通常可执行文件在运行时需要输入参数,GDB中向可执行文件输入参数的命令格式:

set args 参数值1 参数值2 ...

使用“show args”命令就可以查看其默认的参数。

打印代码

命令list(也可以使用简写l)用于列出可执行文件对应源文件的代码,命令格式:

list 开始的行号 结束的行号

如果不输入参数,则从当前行开始打印。之后每次按Enter键后顺序向下列出代码。

打印数据

打印变量或表达式的值可以使用print命令(也可以使用简写p)

设置断点

break命令(也可以使用简写b)在某一行或者某个函数名称设置断点,程序运行到断点的位置会中断,等待用户的下一步操作命令。命令格式:

b 行号|函数名称

设置一个条件断点可以使用break if命令,在调试循环代码时这样的设置比较有用。

使用“info break”命令显示当前断点的信息。

删除某个指定的断点使用命令delete,命令格式:

delete breakpoint 断点编号

禁止某个断点使用命令disable,断点禁止后,GDB调试时在断点处程序不再中断,命令格式:

disable breakpoint 断点编号

允许断点使用命令enable,将禁止的断点重新启动,命令格式:

enable breakpoint 断点编号

清除断点,一次性清除某行处的所有断点使用命令clear,命令格式:

clear 源代码行号

运行程序

GDB在默认情况下是不会让可执行文件运行的,要使程序运行需要输入run命令(也可以使用简写r)。run命令后面可以携带要传递给程序的参数。如果使用不带参数的run命令,GDB就再次使用前一条run命令的参数。

单步调试

nxet命令是单步跟踪命令,简写为n。step命令也是单步调试命令,是可以进入函数体的命令,简写为s。如果进入某个函数后想退出函数体返回到调用的函数中,可以使用命令finish。

设置监测点

命令display可以显示变量的值,在结束或者遇到断点的时候,将设置变量的值显示出来。至于是否显示还要看变量的作用域,display只显示作用域内变量的值。

修改变量的值

使用set命令修改变量的值。

退出GDB

在调试完程序后,使用q命令退出GDB。

变量类型检测

在调试过程中有需要查看变量类型的情况,打印数组或者变量的类型使用whatis命令,命令格式:

whatis 变量名

whatis命令只能获得变量的类型名称,不能得到类型的星系信息,查看变量详细信息使用命令ptype命令。

调用路径

backtrace命令(简写为bt)可以打印函数的调用路径,提供向前跟踪功能。该命令会打印一个顺序列表,函数从最近到最远的调用过程,包括调用函数和其中的参数。

信息info

info命令可以获得当前命令的信息,例如获得断点的情况,参数的设置情况等。

多线程thread

多线程的调试主要是先获得线程的ID号,然后转到该线程进行调试。

info thread命令列出当前进程中的线程号,其中最前面的为调试用的ID。

用thread id进入需要调试的线程。

汇编

disassamble命令打印指定函数的汇编代码。

GDB的帮助信息

在GDB中,输入help命令来获得帮助信息。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值