ddd linux 调试工具_LINUX GDB调试

最近在LINUX下调试C/C++,以前在W下都是基于VS自带的调试工具来debug,换到LINUX后,怎么调试呢?刚开始嫌麻烦就直接使用print方法,随着程序复杂度增加,print效率低下并且已经解码不了问题,对于nginx服务来说,core文件又该怎么调试呢?

答案就是GDB,引用一段官方描述,GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具,对于一名Linux下工作的c++程序员,gdb是必不可少的工具。

1.GDB调试普通可执行文件

g++ -g3 -o0 xxx		编译时加上-g3 -o0
gdb —args ./test xxx	带参数运行
gdb test		直接运行test
b main			break,设置断点
b n			在第n行设置断点
r			运行								run,如果有错误会直接运行到错误处
step			单步调试
n			下一步								下一步
p xxx			打印信息
p (*(p+4))@6		打印p指向的第4个地址中6个字节的数据
bt			打印当前栈中的所有信息(函数调用时所有数据会压入栈中)

2.GDB调试core文件

程序down掉时,会在core文件中保存堆栈信息,需要加入-g来编译,可使用gdb来调试

sudo gdb xxx.core

sudo gdb xxx.core
bt		打印当前的函数调用栈的所有信息
up n		表示向栈的上面移动n层,可以不打n,表示向上移动一层。
down n	        表示向栈的下面移动n层,可以不打n,表示向下移动一层。
p args	        打印变量p的值
l		显示代码
l -10		显示上面10行的代码
l 10		显示下面10行的代码
set print pretty on	可以按行显示

3.Debug配置及debug实例

备注:需要使用Debug模式编译

  • cmake生成的makefile可以添加debug选项
  • 自行写的makefile可以加g++后加上-g3 -o3

linux系统下默认是不产生core文件的,对于nginx服务,需要进行配置,打开此功能;

ulimit -c unlimited		打开linux core文件功能
ulimit -a			查看是否已打开
worker_rlimit_core		4000M;		设置最大nginx core文件大小
working_directory xxx;		配置core文件目录

如果出现no debugging symbols found,说明没有加debug编译。

9e6f4a8b0f0d9e738d2e907394d444db.png

加上debug后再次编译,并加上断点(b),运行(r)。

ced193623bf66df22627fd0f7908b799.png

习惯gdb后,代码调试效率有了质的飞跃,工欲善其事,必先利其器,对LINUX下C开发者来说,掌握GDB确实很有必要。

参考:

[1] https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/gdb.html

[2] https://www.yanbinghu.com/2019/04/20/41283.html

[3] https://www.cnblogs.com/mister-lv/p/6022841.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值