Linux下的GDB

1.前言

GDB是Linux下非常好用且强大的调试工具。GDB可以调试C、C++、Go、java、 objective-c、PHP等语言。对于一名Linux下工作的c/c++程序员,GDB是必不可少的工具

2.GDB使用帮助

GDB命令拥有较多内部命令。在gdb命令提示符下输入help可以查看所有内部命令及使用说明

3.使用GDB前注意文件是否带有调试信息

判断文件是否带有调试信息:要调试C/C++的程序,首先在编译时,要使用gdb调试程序,在使用gcc编译源代码时必须加上-g参数。保留调试信息,否则不能使用GDB进行调试。

当你有一个编译好的二进制文件,你不确定是否带有调试信息,这个时候你可以使用如下的命令验证:

gdb 二进制文件名

如果没有调试信息,则会出现该二进制文件地址(提示无调试信息):

  Reading symbols from /home/ordinary/code/c++/test...(no debugging symbols found)...done.

如果有调试信息,则会出现二进制文件地址:

  
  Reading symbols from /home/ordinary/code/c/test...done.

4.使用GDB


启动gdbgdb <program>:启动gdb,并加载指定的可执行文件<program>gdb <program> <core>:启动gdb,并加载指定的可执行文件<program>和核心转储文件<core>,用于分析程序崩溃时的状态gdb <program> <pid>:启动gdb,并加载指定的可执行文件<program>和进程号为<pid>的正在运行的进程,用于动态调试


退出gdb

quit或q


设置断点break <location> 或 b <location>:在指定的位置设置一个断点,可以是函数名文件名:行号、或者内存地址。例如:

break main:在main函数的开始处设置断点break test.c:10:在test.c文件的第10行设置断点break *0x80483f4:在地址0x80483f4处设置断点


删除指定编号的断点

delete <number> 或 d <number>


查看断点编号

info break或i b


禁用断点

disable <number>


启用断点

enable <number>


list <行号或者函数名> 或 l <行号或者函数名>

调试阶段查看代码


run <arguments> 或 r <arguments>

运行或重新运行程序,并传递指定的参数。如果设置了断点,程序会在遇到断点时暂停,并显示当前的源代码和寄存器值。


next或n

F10执行当前行,并跳到下一行。如果当前行是一个函数调用,next会直接执行整个函数,并不进入函数内部


step或s

F11执行当前行,并跳到下一行。如果当前行是一个函数调用,step会进入函数内部,并停在第一行


continue或c

继续执行程序,直到遇到下一个断点或者程序结束


finish或f

运行所在函数后停下来


until

跳转至指定行


print <expression> 或 p <expression>

打印某个变量或者表达式的值。可以使用任何合法的C语言表达式,包括宏、指针、结构体等

例如:

print x打印变量x的值print *p:打印指针p所指向的值。print foo(x):打印调用foo函数并传递x作为参数后的返回值。


常显示某个变量的地址或者值

display


取消常显示某个变量的地址或者值

undisplay <number>


修改某个变量或者表达式的值。可以使用任何合法的C语言表达式,包括宏、指针、结构体等

set <expression>

例如:

set x = 10:修改变量x的值为10。set *p = 20:修改指针p所指向的值为20。set foo(x) = 30:修改调用foo函数并传递x作为参数后的返回值为30。info registers或i r:显示所有寄存器的值。


  • 28
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jamo@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值