无妄之灾:记录一个奇怪的codelldb问题

本文约 1000 字,阅读需 2 分钟。

背景:最近打算为项目增加一些测试,重构后的项目比较适合用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时发现:

  1. 报错: /usr/local/Cellar/cmake/3.28.1/bin/cmake找不到
  2. 用where查看cmake,发现
    1. cmaker的位置:/usr/local/bin/cmake
    2. 其链接: /usr/local/bin/cmake -> ../Cellar/cmake/3.28.3/bin/cmake
    3. 原来是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"

一下午的时间就这么没了,真是无妄之灾……

20240321102258

总阅读量次。