Mediapipe如何在VS Code+Bazel环境下配置代码调试器
Mediapipe VS Code断点调试配置方案
完全可以通过VS Code断点调试替代逐行打日志的低效排查方式,具体配置如下:
基础概念澄清
- buildifier不是Bazel编译器:它仅用于格式化、校验Bazel的BUILD/WORKSPACE配置文件,不参与代码编译、运行流程,未安装时可暂时留空配置项,不影响调试功能,后续需要规范Bazel配置格式时再安装即可。
- Bazel插件完全兼容bazelisk,直接在插件的
Bazel: Executable配置项中填写本地bazelisk的绝对路径即可,插件调用时会自动匹配项目要求的Bazel版本,和终端中直接使用bazelisk的行为完全一致。
配置前注意
你日常使用的-c opt是发布优化编译参数,会剔除调试符号、做代码指令优化,会导致断点无法命中,调试时必须替换为-c dbg参数编译,保留完整调试信息。
详细配置步骤
- 前置插件准备:除已安装的Bazel插件外,安装VS Code官方C/C扩展,用于提供C代码断点调试能力。
- 配置Bazel插件:打开VS Code设置,找到Bazel扩展配置页,在执行路径项填入本地bazelisk的绝对路径,buildifier路径无需求可以留空。
- 配置调试启动项:在项目根目录新建
.vscode/launch.json文件,写入以下配置:
{ "version": "0.2.0", "configurations": [ { "name": "Debug Hand Tracking", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/bazel-bin/mediapipe/examples/desktop/hand_tracking/hand_tracking_cpu", "args": [ "--calculator_graph_config_file=mediapipe/graphs/hand_tracking/hand_tracking_desktop_signn.pbtxt" ], "cwd": "${workspaceFolder}", "MIMode": "gdb", "setupCommands": [ { "description": "Enable GDB pretty printing", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "Build Mediapipe Debug" } ] }
- 配置预编译任务:在项目根目录新建
.vscode/tasks.json文件,写入以下配置,实现调试前自动完成debug模式编译:
{ "version": "2.0.0", "tasks": [ { "label": "Build Mediapipe Debug", "type": "shell", "command": "bazel build -c dbg --define MEDIAPIPE_DISABLE_GPU=1 mediapipe/examples/desktop/hand_tracking:hand_tracking_cpu", "group": { "kind": "build", "isDefault": true }, "problemMatcher": "$gcc" } ] }
常见问题处理
- 断点显示为灰色未命中:先确认使用
-c dbg参数编译,未添加-O2/O3等优化参数,再触发C/C++扩展重新索引代码即可。 - 代码头文件飘红:在C/C++扩展配置中指定Bazel生成的
compile_commands.json路径,Bazel插件可自动生成该文件,无需手动配置头文件路径。 - 需要添加运行参数:直接修改launch.json中args数组的内容,参数写法和终端
bazel run后传入的参数完全一致。
内容的提问来源于stack exchange,提问作者mcExchange
相关产品推荐
相关产品推荐

