如何正确获得segfault等系统错误的log
发布于 1年前 作者 yorkie 586 次浏览

使用场景

在使用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进程崩溃了。

希望对大家有帮助 :)

回到顶部