如何在VSCode中同时调试Rust与C混合项目?Libvmaf场景遇阻
解决Windows下CodeLLDB无法显示libvmaf C源码的问题
1. 手动配置源码路径映射
LLDB在Windows下常无法自动关联构建时的源码路径与本地项目路径,需手动添加映射:
- 在
launch.json的调试配置中新增sourceMap字段,将构建阶段libvmaf的源码绝对路径映射到项目中libvmaf-sys下的vmaf目录。 - 示例配置:
{ "type": "lldb", "request": "launch", "name": "Debug example 'get_vmaf_scores'", "cargo": { "args": [ "build", "--example=get_vmaf_scores", "--package=libvmaf-rs", "--features", "libvmaf-sys/build,libvmaf-sys/static" ], "filter": { "name": "get_vmaf_scores", "kind": "example" } }, "args": [], "cwd": "${workspaceFolder}", "sourceMap": { "C:/Users/YourUser/AppData/Local/Cargo/registry/src/.../libvmaf-sys-0.4.2/vmaf": "${workspaceFolder}/libvmaf-sys/vmaf" } }
- 获取构建时路径的方法:启动调试后,在LLDB控制台输入
image list -v找到libvmaf库条目,查看调试信息中的源码路径;或用symbol lookup -v 实际libvmaf函数名获取具体路径。
2. 确保libvmaf以Debug模式构建并生成完整调试符号
- 在
libvmaf-sys的build.rs中,编译libvmaf必须启用调试符号:- 若用CMake,添加
CMAKE_BUILD_TYPE=Debug参数,同时确保CMAKE_C_FLAGS_DEBUG包含对应编译器的调试选项:- MinGW/Clang:添加
-g - MSVC:添加
/Zi /Od
- MinGW/Clang:添加
- 示例CMake配置片段:
let mut cmake = cmake::Config::new("vmaf"); cmake .define("CMAKE_BUILD_TYPE", "Debug") .define("CMAKE_C_FLAGS_DEBUG", "-g") // MinGW/Clang场景 // MSVC场景替换为:.define("CMAKE_C_FLAGS_DEBUG", "/Zi /Od") .build(); - 若用CMake,添加
- MSVC环境下,需确保生成的PDB文件与静态库在同一目录,且调试器可访问该文件。
3. 验证静态库的调试符号完整性
使用libvmaf-sys/static特性时,静态库必须包含调试符号:
- MinGW环境:编译时加
-g,符号会直接嵌入静态库。 - MSVC环境:编译生成的PDB文件需随静态库保留,Cargo构建时要确保PDB被复制到目标目录。
4. 检查VSCode的文件排除规则
打开.vscode/settings.json,确认files.exclude中没有排除libvmaf-sys/vmaf目录的规则,例如:
"files.exclude": { // 需移除类似以下的规则 // "libvmaf-sys/vmaf/**": true }
5. 手动在LLDB控制台加载源码映射
若上述配置无效,启动调试后在LLDB控制台执行:
settings set target.source-map /构建时的vmaf路径 ${workspaceFolder}/libvmaf-sys/vmaf
执行后尝试步入C函数,若能正常打开源码,将该映射配置到launch.json的sourceMap字段即可。
内容的提问来源于stack exchange,提问作者Brandon Piña
相关产品推荐
相关产品推荐

