linux mysql 段错误_linux 段错误常见处理方法

1.如果没有产生core文件,可以查询系统log

通过 sudo cat /var/log/messages |grep segfault 或者 sudo dmesg|grep segfault 获得

这种信息一般都是由内存访问越界造成的,不管是用户态程序还是内核态程序访问越界都会出core, 并在系统日志里面输出一条这样的信息。这条信息的前面分别是访问越界的程序名,进程ID号,访问越界的地址以及当时进程堆栈地址等信息,比较有用的信息是 最后的error number. 在上面的信息中,error number是4 ,下面详细介绍一下error number的信息:

在上面的例子中,error number是6, 转成二进制就是110, 即bit2=1, bit1=1, bit0=0, 按照上面的解释,我们可以得出这条信息是由于用户态程序读操作访问越界造成的。

error number是由三个字位组成的,从高到底分别为bit2 bit1和bit0,所以它的取值范围是0~7.

bit2: 值为1表示是用户态程序内存访问越界,值为0表示是内核态程序内存访问越界

bit1: 值为1表示是写操作导致内存访问越界,值为0表示是读操作导致内存访问越界

bit0: 值为1表示没有足够的权限访问非法地址的内容,值为0表示访问的非法地址根本没有对应的页面,也就是无效地址

2.Linux下打开core文件,定位segfaultsource:http://blog.chinaunix.net/uid-24774106-id-344195.html

出现段错误,不容易定位到底是哪行代码出现了问题,segfault多次折磨的笔者死去活来,

查资料发现了定位段错误的方法。

Linux下有核心转储文件即core文件,会把程序崩溃是的现场保存起来供gdb来调试。

打开的办法是 ulimit -c unlimited 。

设置之前可以调用ulimit -c 查看当前的大小,如果是0,表示不生成core文件。unlimited 的含义是不论生成的core文件有多大,我都让系统生成core 文件。

当时这个方法有个弊端是,在那个终端上设置的ulimit就在那个终端上生效,如果你在另一个终端上执行程序,你会发现,纵然有段错误,你也没生成core文件

第二个办法是修改 /root/.bash_profile 文件添加一行  ulimit -S -c  unlimited 然后保存关闭文件。

有很多linux系统/root 目录下并没有.bash_profile 文件,比如SUSE,这没有关系你自己vi 创建这个文件即可。

修改完这个文件之后,执行source /root/.bash_profile,你就可以查看你的修改生效了没有。

查看方法是 ulimit -c.你会发现,终端打印出 unlimited,表示你的配置生效了,你可以新开终端 执行 ulimit -c,发现新开终端也是unlimited 。

好,打开开关之后,你就可以跑你的有segfault的代码了。

一般core文件会生成在你的可执行文件所在的目录下。当然可以设定。

设定的方法是 修改 /proc/sys/kernel/core_pattern

这个文件不支持vi的方式修改,可以使用echo

如echo “/corefile/core-%p-%e-%t” > /proc/sys/kernel/core_pattern

这个语句的含义是将core文件生成在 /corefile/这个目录下

生成的文件名的格式是:“core”-“pid”-可执行程序名-段错误时间

%p ---------段错误进程的PID

%e-----------发生段错误的可执行文件名

%t------- 发生段错误的时间

还有其他配置选项。

生成了core文件,你就可以调试了,调试方法是:

gdb -c core test

或 gdb test core

注test是你的可执行文件名。你就可以想用gdb调试文件一样调试你的core文件了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值