如何正确获得segfault等系统错误的log
使用场景
在使用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进程崩溃了。
希望对大家有帮助 :)