调试目标
找到 core 文件中 JS 调用堆栈,从而结合代码找出致错原因
调试工具
- 调试 node 程序问题导致的 core 文件,需要用到 lldb 和 llnode,llnode 是基于 lldb 的一个插件。lldb 是一个类似 gdb 的调试器,llnode 主要用于输出 js 调用栈信息。具体安装步骤请参考 https://github.com/nodejs/llnode。
- 由于 llnode 是基于 lldb 的一个插件,安装好了 lldb 和 llnode 之后,需要把 llnode 加载到 lldb 中,这样才能在命令行中使用 v8 命令(此步骤很重要)。
如何加载 llnode 到 lldb 中请参考以上 github 库说明。
调试步骤
(1)lldb ***/bin/node -c ***/core.node.***.***
- ***/bin/node 是 node 所在目录
- ***/core.node.***.*** 是 core 文件
(2)plugin load ***/llnode/llnode.dylib
- ***/llnode/llnode.dylib 是 llnode 所在目录,我在 mac 上的 /usr/local/opt/llnode/llnode.dylib
- 这一步是为了加载 llnode 到 lldb 中,根据个人安装时对 plugin 的配置看是不是要执行。我用的是比较笨的办法,每次运行 lldb 都加载一次 llnode 插件,所以这里要执行一次此命令。
- /usr/local/opt/llnode/llnode.dylib 是 llnode 所在目录。
(3)v8 bt 查看 core 文件中调用堆栈
(4)v8 i 0x0000******
查看某一具体参数或函数信息,具体请参考 https://asciinema.org/a/29589
(5)结合代码和报错信息找到出错原因