在学习了解Apollo各个代码模块时,不可避免地要对各个模块进行调试,由于Apollo运行在容器当中,代码结构较为复杂,使用GDB调试工具时间成本高,因此使用VSCODE的调试插件对Apollo各个模块进行调试,可提高调试效率,更加直观的了解代码运行流程。
该官方文档中提到了如何进行代码调试,但本人实际验证发现调试效率不高,因此萌发了使用VSCODE进行调试的想法。
首先需要在VSCODE中下载插件Remote - Containers,该插件在VSCODE中可以使用户进入docker容器中进行代码编写,详情可参考这里。
首先根据Apollo官方镜像创建容器
cd apollo/
bash docker/scripts/dev_start.sh
创建容器后,在VSCODE中通过快捷键Ctrl+Alt+p
打开命令窗口,输入Remote-Containers:Attach to Running Container...
,选择Apollo容器,然后就会进入Apollo容器中。
在窗口的左下角会显示当前所在的容器环境,Remote - Containers插件的各个命令也可以通过点击该区域进行选择。
进入容器后,需要在容器中重新下载VSCODE的一些必要的插件,可根据自身需要进行下载。
通过快捷键Ctrl+Alt+p
打开命令窗口,输入Remote-Containers:Open Container Configuration File
,打开容器配置文件,配置容器的一些参数,如进入容器后的一些环境变量,用户等,我的配置如下:
{
"extensions": [
"BazelBuild.vscode-bazel",
"DamianKoper.gdb-debug",
"eamodio.gitlens",
"GitHub.vscode-pull-request-github",
"Gruntfuggly.todo-tree",
"jeff-hykin.better-cpp-syntax",
"mhutchie.git-graph",
"MS-CEINTL.vscode-language-pack-zh-hans",
"ms-vscode-remote.remote-containers",
"ms-vscode-remote.remote-ssh",
"ms-vscode-remote.remote-ssh-edit",
"ms-vscode-remote.remote-wsl",
"ms-vscode.cmake-tools",
"ms-vscode.cpptools",
"ms-vscode.cpptools-extension-pack",
"ms-vscode.cpptools-themes",
"ms-vsliveshare.vsliveshare",
"twxs.cmake"
],
"workspaceFolder": "/apollo",
"remoteUser": "hfut",
"remoteEnv": {
"HISTFILE": "/apollo/.dev_bash_hist"
}
}
该配置文件可在官方文档中找到详细用法。
打开Apollo所在的文件夹,重新编译Apollo代码,生成带调试信息的可执行文件。
bash apollo.sh build_dbg
生成调试文件,可参考launch.json
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++ - 生成和调试活动文件",
"type": "cppdbg",
"request": "launch",
"program": "/apollo/bazel-bin/cyber/mainboard/mainboard",
"args": ["-d","/apollo/modules/localization/dag/dag_streaming_msf_localization.dag"],
"stopAtEntry": false,
"cwd": "/apollo",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
// "preLaunchTask": "C/C++: g++ 生成活动文件",
"miDebuggerPath": "/usr/bin/gdb"
}
]
}
本launch.json
文件以调试localization模块为例,其中program
为mainboard
可执行文件的路径,用于运行dag文件,args
为要调试模块的dag文件,若要调试其他模块,修改args
即可。
注意:cwd
必须为Apollo项目所在路径,否则调试过程中会找不到相关的代码文件。
快捷键F5
开始调试
Enjoy!