打印所有堆栈信息 gdb_详解gdb的使用技巧

点击蓝字,关注我们

01

概念

    GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。

    在实际应用中,有两种调试方法:在线调试和离线调试。

    离线调试适用于开发测试环境,可以自由启停进程,设置断点;在线调试一般用于现场问题分析,不能随便启停进程,对于技术要求较高。

02

前提条件

    2.1 编译

    若想执行gdb调试,在Makefile文件中需要增加编译调试选项-g,例如:

    gdb dup_file.c –o dum_file_elf –g –lpthread

    说明:-g选项的作用是在可执行文件(ELF)中加入源代码的相关信息,比如ELF中第几条机器指令对应源代码的行数。但不是把整个源文件嵌入到可执行文件中,所以在调试时必须保证gdb能找到源文件。

    -g完整格式是-glevel,其中,level中指定了调试信息中包含了调试信息的多少,默认的是2,level=1最少,level=3最多。

    2.2 readelf查看段信息

    例如:

    readelf -S helloWorld|grep debug

    注:helloWorld为文件名,如果没有任何debug信息,则不能被调试。

    2.3 file查看strip状况

    下面的情况也是不可调试的:

    file helloWorld

    helloWorld: (省略前面内容) stripped

    注:如果最后是stripped,则说明该文件的符号表信息和调试信息已被去除,不能使用gdb调试。但是not stripped的情况并不能说明能够被调试。

03

使用方法

    3.1 启动调试

    在开发中可以将源码和可执行文件拷贝到某一目录下,使用gdb启动进程进行调试,也可以不拷贝源码和可执行文件,使用NFS挂载到编译环境执行调试;在现场环境中使用ps获取进程的pid,然后gdb –p pid执行在线调试。

    离线调试:

    gdb 进程名

    gdb –tui 进程名

    在线调试:

    ps –A | grep 进程名

    gdb –p pid/gdb attach pid

    说明:使用-tui参数可以将调试窗口分为两部分:上面是源码,下面是调试信息,使用Ctrl+n/Ctrl+p或者方向键进行翻页。

    带参数调试:

    1、启动的时候带上参数

    gdb --args xxx 参

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值