如何用VSCode调试Apollo园区版:从零开始完整指南

一、背景知识

本文将详细演示如何用VSCode调试Apollo 9.0园区版的camera_detection_bev模块(鸟瞰图摄像头检测模块)。在开始操作前,我们先理解几个核心概念:

  1. 编译数据库:记录每个源文件的编译参数(如头文件路径、宏定义等),使编辑器能准确理解代码结构
  2. 远程调试:在本地VSCode中调试运行在远程服务器/Docker容器中的程序
  3. 符号链接:创建文件"快捷方式",解决开发环境与运行环境路径不一致的问题

通过本文,你将掌握:

  • 编译日志生成原理 - 如何捕获完整编译命令
  • 代码智能跳转基础 - 生成compile_commands.json的方法
  • 远程调试机制 - 配置SSH远程调试的完整流程
  • 运行时环境搭建 - 调试Apollo模块的特殊配置技巧

二、操作步骤详解

1. 准备调试环境

1.1 拷贝待调试模块
# 1、进入Apollo开发容器
aem enter

# 2、创建工作目录 (避免修改原始代码)
mkdir -p modules/perception/

# 3、在宿主机上将camera_detection_bev拷贝到容器内的/apollo_workspace/modules/perception/目录下

1.2 安装VSCode v1.85版本

官方下载链接

版本兼容性原理
Apollo 9.0的Docker镜基于Ubuntu 18.04构建:

  • 新版VSCode依赖glibc 2.29+
  • Ubuntu 18.04默认glibc版本为2.27
  • v1.85是最后一个兼容glibc 2.27的稳定版本

若强行使用新版会导致VSCode Server安装失败:

/lib/x86_64-linux-gnu/libc.so.6: version 'GLIBC_2.28' not found

2. 生成编译数据库

2.1 捕获完整编译命令
buildtool build --dbg -p modules/perception/camera_detection_bev \
	--arguments "-s --jobs=1"  2>&1 | tee build.log

参数解析

  • --dbg:生成带调试符号的二进制文件 (GDB必需)
  • -s:显示完整编译命令 (Bazel默认隐藏)
  • --jobs=1:强制单线程编译 (确保日志顺序正确)
  • 2>&1 | tee build.log:同时输出到终端和文件

关键原理
编译日志中包含真实的编译指令,这是生成compile_commands.json的基础。


2.2 生成compile_commands.json

创建日志解析脚本:

cd /apollo_workspace/
ROOT_DIR=`find .cache/bazel -name "apollo-park-generic" | head -n 1 | sed 's#.cache/bazel/##g' | awk -F/ '{print "/apollo_workspace/.cache/bazel/"$1"/execroot/apollo-park-generic"}'`

cat > parser.py <<-EOF
import re
import sys
import json

def extract_strings(text):
    # 正则表达式匹配模式:非贪婪模式匹配最近的一个右括号
    pattern = r'crosstool_wrapper_driver_is_not_gcc.*?\)'
    # 使用re.DOTALL确保"."匹配换行符
    matches = re.findall(pattern, text, re.DOTALL)
    return matches

def main():
    # 从文件或标准输入读取内容
    if len(sys.argv) > 1:
        with open(sys.argv[1], 'r') as file:
            text = file.read()
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hi20240217

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值