如何正确获得segfault等系统错误的log

如题所述

如何正确获得segfault等系统错误的log
发布于 3 年前 作者 yorkie 2780 次浏览 最后一次编辑是 4 个月前
使用场景
在使用addon模块或者你就是addon作者时,如果在c++源码中存在运行时错误,nodejs在crush后,并不会报告相应的trace,此时需要你开启操作系统的core dump,然后结合lldb/gdb来还原事故现场。
开启core dump
macos默认关闭了coredump,可以通过下面的脚本来开启:
$ ulimit -c unlimited

当你的node进程崩溃后,只有带有(core dumped)这样的字样时,才会生成core-image文件。
core-image文件
如果使用osx,可以在/cores/目录下找到如core.90283的文件,.号后面的数字代表pid
如果使用linux,你需要通过设置/proc/sys/kernel/core_pattern的值来指定core-image文件的生成路径。关于core_pattern可以具体查看core man
事故恢复
接着使用lldb(MacOS)/gdb(linux)来查看崩溃log,命令如下:
$ gdb node /tmp/your-core-file-path
$ lldb node /cores/your-core-file-path

关于gdb/lldb的用法详见这个地址
往往这个时候,你就可以发现可能是你自己的代码导致node进程崩溃了。
希望对大家有帮助 :)
温馨提示:内容为网友见解,仅供参考
无其他回答

如何正确获得segfault等系统错误的log
分析过程发现段错误:日志中的信息表明,进程号为11274的进程由于收到SIGSEGV信号而退出了。收到这个信号的时候,程序是可以生成core文件的。不过通过日志我们可以知道进程11274退出时没有生成core文件。因为在php-fpm的日志中,如果退出时生成了core文件,日志中会有“SIGSEGV – core dumped”字样。如:[2...

如何分析crash的backtrace
MySQL异常退出往往会会在error.log中打印backtrace信息,我们从这个backtrace中可以得到一些异常的原因,例如断言错误,空指针内容的访问等。顺着这些信息排查,我们一般再结合代码逻辑来做推断,写测试用例重现,再打补丁,再验证等过程。 但是,线上早期部 MySQL异常退出往往会会在error.log中打印backtrace信息,我们从这个backtrac...

云主机文件系统readonly处理案例
  1、运维人员在重启云主机之前尽量先收集一些关键的日志,如\/var\/log下面的一些日志、dmesg等,有条件也要收集宿主机的日志;  2、fsck是Linux内核自带工具,它不仅可以对文件系统进行扫描,还能修正文件系统的一些问题。 fsck扫描文件系统时一定要在单用户模式、修复模式或把设备umount后...

如何正确获得segfault等系统错误的log
系统有问题了。直接换个验证过的系统盘重装系统就行了,这样就可以全程自动、顺利解决 系统发生内部错误 的问题了。用u盘或者硬盘这些都是可以的,且安装速度非常快。但关键是:要有兼容性好的(兼容ide、achi、Raid模式的安装)

如何找出发生SEGV内存错误的程序
另外,在\/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程序时...

如何找出发生SEGV内存错误的程序
另外,在\/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程序时...

相似回答