C语言oo1cpp怎么进,如何找出发生SEGV内存错误的程序 00 搜索技术博客

满意答案

分析过程

发现段错误:

日志中的信息表明,进程号为11274的进程由于收到SIGSEGV信号而退出了。收到这个信号的时候,程序是可以生成core文件的。不过通过日志我们可以知道进程11274退出时没有生成core文件。因为在php-fpm的日志中,如果退出时生成了core文件,日志中会有“SIGSEGV – core dumped”字样。如:

[20-Feb-2014 08:37:59] WARNING: [pool www] child 15845 exited on signal 11 (SIGSEGV – core dumped) after 1.051001 seconds from start

生成core文件:

为啥没生成core文件?是因为我们的系统做了限制。执行如下命令可以查看限制情况:

可以看出,系统对于core文件大小默认限制是0.也就是说不能生成core文件。可以通过以下命令设置大小。

$ulimit -c unlimited

通过命令,我们就把系统对于core文件的大小限制去除了。

设置完后,重启了php-fpm 进程。剩下的事情,就是坐等core文件生成了。

第二天,查看php-fpm日志,发现了如下记录:

[20-Feb-2014 08:37:59] WARNING: [pool www] child 15845 exited on signal 11 (SIGSEGV – core dumped) after 1.051001 seconds from start

[20-Feb-2014 08:39:04] WARNING: [pool www] child 17803 exited on signal 11 (SIGSEGV – core dumped) after 0.927973 seconds from start

[20-Feb-2014 08:42:18] WARNING: [pool www] child 23491 exited on signal 11 (SIGSEGV – core dumped) after 0.798308 seconds from start

说明,core文件已经生成。

更多core文件生成和使用的相关信息请查看《 怎样用core文件调试你的linux程序》

gdb分析core文件:

既然core文件生成了,现在该gdb上场了。通过如下命令查看程序退出时的栈信息。

$gdb -e /home/admin/php/sbin/php-fpm -c core.15845

…………..此处省略n多无关紧要的字

$info threads

3 process 15850 0x0000003cf92d3f9a in epoll_ctl () from /lib64/libc.so.6

2 process 15845 0x0000003cf92c4f65 in _xstat () from /lib64/libc.so.6

* 1 process 15851 0x00007fa94e230310 in ez_run (loop=0x2434c60, flags=0) at ez.c:2363

$thread 2

[Switching to thread 2 (process 15845)]#0 0x0000003cf92c4f65 in _xstat () from /lib64/libc.so.6

$bt

#0 0x0000003cf92c4f65 in _xstat () from /lib64/libc.so.6

#1 0x00007fa94df8fd8b in hsf::hsf_mkdir (path=0x7fa930001628 “/home/admin/logs/hsfcpp”) at /usr/include/sys/stat.h:436

#2 0x00007fa94df8feae in hsf::hsf_mkdirp (pathname=) at utils/fileutils.cc:50

#3 0x00007fa94dfad7cc in hsf::hsf_stat_log_init (path=@0x7fa94e21f080, name=@0x7fffb607a620) at hsf/hsf_stat_file.cc:37

#4 0x00007fa94dfabb36 in hsf::hsf_stat_monitor::init (this=) at hsf/hsf_stat_monitor.cc:231

#5 0x00007fa94dfa899a in hsf_core_bootstrap () at hsf/hsf.cc:104

#6 0x00007fa94dfa8cea in hsf::hsf_core::init () at hsf/hsf.cc:129

#7 0x00007fa94e448b52 in zm_activate_hsf (type=, module_number=) at /home/lingzhan/hsf_php_0.9/php_hsf.cpp:188

#8 0x000000000061d94c in ?? ()

#9 0x000000000226ee20 in ?? ()

#10 0x0000000000624c35 in ?? ()

#11 0x00000000024bc840 in ?? ()

#12 0x00000000024bc840 in ?? ()

#13 0x00000000024bc840 in ?? ()

#14 0×0000000000000000 in ?? ()

再继续分析其他的两个core文件,发现也都有这个栈信息。基本可以肯定是hsf的问题了。

另外,在/var/log/message 中也发现了如下记录:

Mar 13 14:40:07 s006132.cm6 kernel: : [5332900.567547] php-fpm[31017]: segfault at 30 ip 00007fdc74df3310 sp 00000000435b8040 error 4 in libeasy.so.0[7fdc74de3000+23000]

libeasy.so 正是hsf中调用的。进一步确认是执行hsf程序时出现问题的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值