gdb 调试总结

这两天linux下调试程序到用到了GDB,在这里总结下:

 

首先,要使用gdb的话,必须在用gcc编译时,使用 -g 选项,在可执行文件中加入调试信息,这样后续就可以用gdb进行调试了。

 

1. 开始调试

进入gdb后,先使用file命令加载可执行文件,然后可以使用run/r或者start命令,GDB建立子进程来运行被调试程序,另外,runstart命令后面都可以加上传递给被调试程序的参数,若不加参数则使用GDB启动时传递的参数或者使用set args命令设置的参数。

runstart命令稍有不同,即run仅仅加载程序然后运行,直到断点或者程序结束,而start会在程序的入口函数(main)设置一个临时断点,程序运行到那里就会暂停,临时断点也随即被清除。

 

2. 设置断点

命令

解释

break/b

使用格式:break [文件名] : [函数名/行号] [ if 条件]

添加断点到指定的位置,如果又条件的话,则还需要满足if条件程序才会停下

tbreak/tb

格式同break/b

设置临时断点,即断点只起到一次作用

info b

查看所有断点

del 断点号

删除一个短线,断点号可通过info b得到

del

删除所有断点

 

示例:b main.cpp:main if argc==3

表示在main.cppmain函数中设置断点,并且只有在该处argc==3时才停下

3. watch point观察点

顾名思义,它一般用来观察某个变量/内存地址的状态(也可以是表达式),如可以监控该变量/内存值是否被程序读/写情况,因此watch一般和continue/c配合使用,用法如下:

命令

解释

watch 表达式

当表达式的值被改变时,停止

awatch 表达式

当表达式被读/写时,停止

rwatch 表达式

当表达式被读时,停止

 

4. 执行程序

命令

解释

step/s

相当于step into

next/n

相当于step over

continue/c

执行程序直到断点

where

显示当前所在的函数和行号

until 行号

执行直到指定的位置(位置必须在当前栈帧,并且该命令碰到断点会停下来)

finish

执行直到当前函数结束

return 栈帧号

返回指定的栈帧,若不带参数,默认为当前栈帧

 

其中,sn后还可以带一个数字作为参数,表示执行ks或者n

5. 查看变量

 

 

变量名

函数名和文件名用来限制待查看变量的作用域

display 变量名

程序每次停下来时,都会打印

info display

查看display的设置信息

undisplay display序号

取消指定序号的display设置

del display

删除所有的display设置

 

调试完成后,quit命令用于退出gdb

从上可知,gdb的功能事非常强大的,也很复杂,这里只是列举出了常用的一些命令,其他更复杂或者不常用的命令的使用,就多看gdbman文档咯。

最后,欢迎拍砖

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值