gdb调试Segmentation fault (core dumped)

1.在Linux下,当程序崩溃时,会生成一个core文件,其中包含了程序崩溃时的内存状态信息。可以使用gdb调试器来分析core文件,定位到崩溃的代码位置。

具体步骤如下:
确认程序已经开启core dump功能。可以使用ulimit命令查看:

ulimit -a

如果core file size为0,则需要设置core dump大小:

ulimit -c unlimited

运行程序,让它崩溃,生成core文件。
使用gdb调试器打开core文件:

gdb <程序名> <core文件名>

使用bt命令查看调用栈信息,找到崩溃的位置:

bt

如果需要查看具体代码,可以使用list命令:

list <行号>

如果需要查看变量的值,可以使用print命令:

print <变量名>

通过以上步骤,可以定位到崩溃的代码位置,并进行调试。
在这里插入图片描述

2.如果未找到core文件,如client/cli/core: No such file or directory.

如果程序崩溃后没有生成core文件,可能是因为core dump功能没有开启。可以使用ulimit命令查看当前core dump大小限制:

ulimit -a

如果core file size为0,则需要设置core dump大小:

ulimit -c unlimited

另外,还需要确认程序是否被设置为不生成core文件。可以使用以下命令查看:

cat /proc/sys/kernel/core_pattern

如果输出为空或者为“|/usr/share/apport/apport %p %s %c %d %P %E”,则表示程序被设置为不生成core文件。可以使用以下命令修改:

echo "core.%e.%p" > /proc/sys/kernel/core_pattern

修改后,再次运行程序,让它崩溃,就可以生成core文件了。

3.如果遇到没有权限:echo “core.%e.%p” > /proc/sys/kernel/core_pattern-bash: /proc/sys/kernel/core_pattern: Permission denied

可以使用以下命令切换到root用户:

sudo su -

然后再执行修改core_pattern的命令:

echo "core.%e.%p" > /proc/sys/kernel/core_pattern

修改完成后,可以使用exit命令退出root用户。

如果不想生成core文件,可以使用以下命令关闭core dump功能:

ulimit -c 0

这样,程序崩溃时就不会生成core文件了。如果需要重新开启core dump功能,可以将core dump大小设置为非0值,例如:

ulimit -c unlimited

另外,也可以将core_pattern设置为空,这样程序崩溃时也不会生成core文件:

echo "" > /proc/sys/kernel/core_pattern
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值