M1芯片Mac上Node.js用lldb事后调试仅显示单个调用帧问题
解决M1 Mac上Node.js事后调试调用栈不完整问题
1. 确认Node.js架构匹配
首先确保你使用的是arm64原生版本的Node.js,而非通过Rosetta运行的x86_64版本:
- 执行命令:
node -p process.arch - 如果输出是
x64,需要重新安装arm64版本的Node.js:- 用nvm安装:
arch -arm64 nvm install --lts - 或从Node.js官网直接下载arm64架构的安装包
- 用nvm安装:
2. 重新生成符合架构的核心文件
删除旧的core文件,重新执行以下步骤:
- 设置core文件大小无限制:
ulimit -c unlimited - 运行崩溃脚本:
node --abort-on-uncaught-exception crash.js
(crash.js内容:throw new Error('BOOM');)
3. 正确加载核心文件并查看调用栈
直接使用lldb加载,无需额外指定arch -arm64(M1上lldb默认适配arm64):
- 执行命令:
lldb node -c core.xxxx(替换xxxx为实际的进程ID) - 在lldb交互界面中,执行以下命令查看完整调用栈:
bt all:查看所有线程的调用栈thread backtrace <线程ID>:查看指定线程的详细调用栈
额外注意事项
- 如果仍无法看到完整调用栈,需要确保Node.js带有调试符号:
- 官方安装的Node.js默认包含符号,若使用brew安装,可执行
brew install node --with-debug(部分版本可能调整为brew install node --debug) - 或者手动下载对应版本的符号文件,在lldb中通过
target symbols add <符号文件路径>加载
- 官方安装的Node.js默认包含符号,若使用brew安装,可执行
内容的提问来源于stack exchange,提问作者Gorez Tony
相关产品推荐
相关产品推荐

