怎么找linux段错误,linux下寻找段错误的方法

为了能够快速找到发生段错误的地方,记录以下两种方法。

objdump和backtrace的配合使用 :https://www.cnblogs.com/jiangyibo/p/9507555.html

代码:test.c

49f5f775923c009c168437c1a0a43aab.png

一、命令addr2line:  addr2line -e '可执行文件名'  'dmesg打印的地址'

编译的时候一定要加“-g”  添加调试信息:gcc -g test.c

生成的可执行文件a.out一运行就会报错:Segmentation fault

调用命令dmesg ,可以查看系统启动信息,其中最新的一行信息应该是段错误的描述信息,如下,ip后的地址就是发生段错误的地址。

36063fc3379a655932cc201c4ce2616c.png

然后调用命令"addr2line -e a.out 0x8043db"就会打印出发生错误的文件和行号:

21f7f58245f679761390083000796afb.png

二、core dumpe文件:程序崩溃时会保存程序运行时的内存信息

先使用 ulimit -a 查看目前资源限制的设定:

8975278e774ece65f89a470c3a48b8d1.png

可查看到“core file size”的大小为0,我们设置成 200。

然后再次 gcc -g test.c ,运行可执行文件a.out:

9addfc148840ec73a3d4eb5e0cd948db.png

ls可以看到当前目录下生成了“core”文件

然后我们 gdb a.out:

250f6f4a5135693e639c330e9f0f3c5b.png

可以看到,一旦我们run了之后,程序就会停在发生段错误的地方。

或者执行 gdb a.out core ,gdb会自动运行并停在发生段错误的地方。

一般调用ulimit -c X 设置的文件大小都是临时有效,如果要设置永久有效,可以修改/etc/security/limits.conf 文件, 找到 * soft core 0,修改为* soft core unlimited保存,这样每次启动时都会去读取这个配置文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值