Windows ARM64下VS Code用LLDB-MI遇「CString not terminated」错误
问题背景
Windows ARM64(Snapdragon X Elite)设备上,在VS Code中配置LLVM-Mingw 18.1.18作为开发环境时,使用lldb-mi启动调试会出现「CString not terminated」等MI协议解析错误,但直接通过lldb CLI调试完全正常。由于CodeLLDB扩展暂不支持ARM64架构,且已尝试修改launch.json中的绝对路径、调整路径格式、移除路径下划线等操作,问题仍未解决。
可行解决方案
1. 降级LLVM-Mingw版本
部分新版本LLVM-Mingw的lldb-mi模块在ARM64平台存在兼容性问题,降级到17.x系列版本(比如17.0.6)大概率能解决MI解析错误:
- 卸载当前的LLVM-Mingw 18.1.18
- 下载对应ARM64架构的LLVM-Mingw 17.0.6安装包
- 配置系统环境变量,确保
lldb-mi.exe所在路径被添加到PATH中 - 重启VS Code后重新尝试调试
2. 手动指定lldb-mi启动参数
在launch.json中添加miDebuggerArgs配置,开启日志并强制使用严格的MI协议解析模式,同时通过日志定位具体错误点:
{ "version": "0.2.0", "configurations": [ { "name": "LLDB-MI Debug", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/a.exe", "args": [], "stopAtEntry": false, "cwd": "${fileDirname}", "environment": [], "externalConsole": false, "MIMode": "lldb", "miDebuggerPath": "C:/path/to/llvm-mingw/bin/lldb-mi.exe", "miDebuggerArgs": "--log-file=lldb-mi.log --log-level=verbose", "setupCommands": [ { "description": "启用格式化输出", "text": "-enable-pretty-printing", "ignoreFailures": true } ] } ] }
生成的lldb-mi.log会记录MI协议交互的详细内容,可根据日志中的错误提示进一步调整参数或排查路径问题。
3. 绕开lldb-mi,直接用lldb CLI调试
既然lldb CLI调试正常,可通过VS Code的任务和启动配置结合,直接调用lldb CLI完成调试:
第一步:配置tasks.json(编译代码)
{ "version": "2.0.0", "tasks": [ { "label": "Clang编译", "type": "shell", "command": "clang ${file} -o ${fileDirname}/${fileBasenameNoExtension}.exe", "group": { "kind": "build", "isDefault": true }, "problemMatcher": "$gcc" } ] }
第二步:配置launch.json(启动调试)
{ "version": "0.2.0", "configurations": [ { "name": "LLDB CLI调试", "type": "cppvsdbg", "request": "launch", "program": "${fileDirname}/${fileBasenameNoExtension}.exe", "args": [], "stopAtEntry": false, "cwd": "${fileDirname}", "externalConsole": true, "preLaunchTask": "Clang编译" } ] }
这种方式直接跳过lldb-mi的MI协议环节,完全利用lldb CLI的原生调试能力。
4. 源码编译修复lldb-mi(进阶方案)
如果上述方案都无效,可尝试针对ARM64平台修复lldb-mi的解析逻辑:
- 克隆LLVM官方源码仓库,切换到18.1.18的tag版本
- 进入
lldb/tools/lldb-mi目录,查找「CString not terminated」相关的字符串解析代码 - 修复ARM64平台下可能存在的字节序或内存对齐问题
- 使用CMake交叉编译ARM64版本的lldb-mi,替换现有安装目录中的文件
内容的提问来源于stack exchange,提问作者fishkopf
相关产品推荐
相关产品推荐

