无妄之灾:记录一个奇怪的codelldb问题
背景:最近打算为项目增加一些测试,重构后的项目比较适合用VSCode + codelldb调试,因为编译适合放在命令行(有一些环境变量依赖),VSCode直接启动产物并调试就行了,launch.json也非常简单。
但非常诡异的是,lldb一直启动失败,如下:
Console is in 'evaluation' mode, prefix commands with '/cmd ' or '`'.
Executing script: preRunCommands
Launching: ****************//脱敏
Launched process 60681
Process exited with code -1.
直接结束了,也没有什么有价值的信息!
Reload Windows之后再次尝试,发现一闪而过的报错,截图如下图P1部分。是一个比较好理解的node错误。但问题是我最近从来没动过node。
每次遇到此类问题都比较头大,只能根据Google尝试。其间又出现了一些其他错误(在卸载旧版本之后)如下图P2。
Note: 看来要找个时间1系统学习下node/nvm/npm了
接在搞了半天node环境之后,问题依然没有解决。接下来又花了1个多小时:
- 安装其他版本的codelldb
- 重新安装VSCode
- 升级zsh
- 重装node
- brew update
- 重启电脑(真是下了血本)
均无效果。但升级之后,重编ut时发现:
- 报错: /usr/local/Cellar/cmake/3.28.1/bin/cmake找不到
- 用where查看cmake,发现
- cmaker的位置:/usr/local/bin/cmake
- 其链接: /usr/local/bin/cmake -> ../Cellar/cmake/3.28.3/bin/cmake
- 原来是cmake升级了….
同时发现用codelldb自带的lldb启动ut程序,是无法run成功的,原来是lldb的锅。用系统自带的lldb就可以,如下图P3。
codelldb自定义的地方是比较好找的,文档也有说明,在:lldb.library。
但codelldb要求设置的是lldb的动态库,但系统的lldb是一个很小的可执行文件:
~ lldb --version
lldb-1500.0.22.8
Apple Swift version 5.9 (swiftlang-5.9.0.128.108 clang-1500.0.40.1)
~ where lldb
/usr/bin/lldb
~ otool -L /usr/bin/lldb
/usr/bin/lldb:
/usr/lib/libxcselect.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1336.0.0)
这下不知道去哪找了。但想起前面的Cellar,加上之前就发现Cellar下有不少软件是通过PATH找不到的,于是手动寻找,结果如下:
~ ls /usr/local/Cellar/llvm # tap
llvm/ llvm@15/ llvm@16/
/usr/local/Cellar/llvm find . -iname "*lldb*lib"
./17.0.6_1/lib/liblldb.dylib
./17.0.6_1/lib/liblldb.17.0.6.dylib
/usr/local/Cellar/llvm@15 find . -iname "*lldb*lib"
/usr/local/Cellar/llvm@16 find . -iname "*lldb*lib"
./16.0.6/lib/liblldb.dylib
./16.0.6/lib/liblldb.16.0.6.dylib
注意到llvm(其实是17)和llvm16下面都是有这个lib的,尝试之后发现,llvm16的依然失败,但llvm(17)的就可以了。即设置成
"lldb.library": "/usr/local/Cellar/llvm/17.0.6_1/lib/liblldb.dylib"
一下午的时间就这么没了,真是无妄之灾……