GDB调试-小试牛刀

This is the GNU debugger. Usage:

gdb [options] [executable-file [core-file or process-id]]

gdb [options] --args executable-file [inferior-arguments …]

调试core文件

配置环境

段错误 (核心已转储)

设置ulimit -c unlimited永久生效

vim /etc/security/limits.conf
修改后如下面两行

在这里插入图片描述

$ ulimit -c unlimied #表示不限制core文件大小

$ ulimit -c 10 #设置最大大小,单位为块,一块默认为512字节

设置core文件生成地址

vim /etc/sysctl.conf

添加一行:kernel.core_pattern=core-%e-%p-%t

sysctl -p 让配置立刻生效

总结

目前出现段错误,则core文件就会出现在当前执行目录下面。

$ gdb 程序文件名 core文件名

调试已运行程序

如果程序已经运行了怎么办呢?
首先使用ps命令找到进程id:

$ ps -ef|grep 进程名

或者:

$ pidof 进程名

attach方式

假设获取到进程id为20829,则可用下面的方式调试进程:

$ gdb

(gdb) attach 20829

定位crash问题—addr2line

有时候程序崩溃了但不幸没有生成core文件,是不是就完全没有办法了呢?还是cmdTest的例子。运行完cmdTest之后,我们通过dmesg命令可以获取到以下内容

1[27153070.538380] traps: cmdTest[2836] trap divide error ip:40053b sp:7ffc230d9280 error:0 in cmdTest[400000+1000]

该信息记录了cmdTest运行出错的基本原因(divide error)和出错位置(40053b),我们使用addr2line命令获取出错具体行号:

1 2addr2line -e cmdTest 40053b /home/hyb/practice/cmdTest.c:4

可以看到addr2line命令将地址(40053b)翻译成了文件名(cmdTest.c)和行号(4),确定了出错位置。

小结

本节主要介绍了两种类型的GDB启动调试方式,分别是调试未运行的程序和已经运行的程序。对于什么样的程序能够进行调试也进行了简单说明。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

踏马潜行

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

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

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

打赏作者

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

抵扣说明:

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

余额充值