本文做者:Apollo开发者社区javascript
在Apollo开发者社区中,常常被问及的一个问题是:用什么IDE工具进行开发?java
Apollo开发者社区荣誉布道师—贺博士曾经写过一篇博客使用Vscode编译、调试Apollo项目,介绍了如何用Vscode结合Gdb进行调试,为开发者提供了调试方法。docker
社区优秀开发者—杨鸿城近期发现一种更为简便的方式能够用Vscode-insiders进行Apollo项目调试,操做体验很是接近IDE,故写一篇教程分享给你们,但愿能给广大开发者带来必定的帮助。json
如下,ENJOY bootstrap
VsCode是微软第一款支持Linux的轻量级代码编辑器,其功能介于编辑器与IDE之间,但更倾向于一个编辑器。Vscode有两个版本,蓝色的Vscode是很是稳定的发行版本,Vscode-insiders,至关于Bate版本,测试版,会有一些新的功能。bash
本文使用Vscode-insiders 的Docker 和Remote - Containers 扩展,能够便捷地调试Apollo项目,而蓝色的Vscode不具有该调试功能。编辑器
Vscode-insiders有两种安装方式,分别是Apt安装和Deb包安装。Vscode-insiders 和蓝色的Vscode 能够同时使用,安装Vscode-insiders 无需卸载蓝色的Vscode。ide
Apt方式安装:工具
1sudo apt-get update 2sudo apt-get install code-insiders
Deb方式安装:post
在 https://code.visualstudio.com/insiders/ 下载 Vscode-insiders 的Deb包,
1sudo dpkg -i code-insiders_xxx.deb
运行Vscode-insiders,在扩展栏中搜索 Docker 和 Remote - Containers 扩展并安装。
在 https://code.visualstudio.com/docs/remote/containers 中可查看Docker扩展的详细教程。
▲Docker安装
▲Remote - Containers安装
因为Apollo项目是用C++进行开发,因此还需安装C++扩展。
▲C++扩展
安装完毕后如图所示:
▲Docker 和 Remote - Containers 安装图示
关于如何构建 Apollo3.5或5.0 已在Ubuntu14.04搭建GPU版本的百度Apollo3.5自动驾驶平台详细介绍。
1cd apollo 2bash docker/scripts/dev_start.sh 3bash docker/scripts/dev_into.sh 4bash scripts/bootstrap.sh
Apollo Docker 启动后,打开Vscode-insiders,选中Docker图标,出现Apollo镜像,如图所示:
▲启动Vscode-insiders
右键选中Apolloauto/apollo:dev-x86_64-xxx 镜像,选中Attach visual studio code(蓝色的Vscode即便安装了Docker扩展也没有此选项)
▲选中Attach visual studio code
此时Vscode会自动打开一个新窗口加载Container,若左下角出现 Attached container 字样,则表示 Vscode 已加载完成。
▲Vscode 加载完成
而后选择 【打开文件夹】,键入 /apollo/ 后肯定。
▲键入 /apollo/
此时Vscode-insiders 已经加载 Apollo 镜像中的/apollo 文件夹,接着打开扩展栏,在Docker中安装C++ 扩展(部分电脑会自动安装),安装后点击【从新加载】。
▲在Docker中安装C++ 扩展
加载完成后即配置好环境。
▲加载完成
完成环境配置后,选择【调试】-【打开配置】,自动打开 /Apollo/.vscode/launch.json 配置文件:
根据本身的须要,修改 Program 和 Args 参数,便可调试Apollo单元测试程序,如下给出一个例子:
1{ 2 "version": "0.2.0", 3 "configurations": [ 4 5 { 6 "name": "(gdb) Launch", 7 "type": "cppdbg", 8 "request": "launch", 9 "program": "/apollo/bazel-bin/modules/perception/camera/test/camera_lib_lane_postprocessor_denseline_lane_postprocessor_test", 10 "args": [], 11 "stopAtEntry": false, 12 "cwd": "${workspaceFolder}", 13 "environment": [], 14 "externalConsole": false, 15 "MIMode": "gdb", 16 "setupCommands": [ 17 { 18 "description": "Enable pretty-printing for gdb", 19 "text": "-enable-pretty-printing", 20 "ignoreFailures": true 21 } 22 ] 23 } 24 ] 25}
打开对应的测试代码文件,加入断点,选择【调试】-【启动调试】,便可像其余IDE进行方便的代码调试。
F10:单步调试
F11:单步跳入
Shift+F11:单步跳出
左侧可直观地看到堆栈和变量信息:
▲堆栈和变量信息
修改代码后在Docker中运行Build,完成编译后便可再次启动调试。
Apollo开发者社区公众号曾发过的《开发者说 | Apollo 3.5各功能模块启动过程解析》,详细地介绍了Apollo3.5 的模块启动过程。
经过在 /apollo/cyber/mainboard/mainboard.cc 加入断点,能够详细地看到模块的启动过程(如何加载Dag和Conf文件进行初始化),极大地方便了开发者理解和调试Apollo模块。
PS: Apollo3.0及之前的版本仍然可用此种方式调试,只需把 Program 改为Ros可执行程序路径,以及 Args改为对应的参数。
1{ 2 "version": "0.2.0", 3 "configurations": [ 4 5 { 6 "name": "(gdb) Launch", 7 "type": "cppdbg", 8 "request": "launch", 9 "program": "/apollo/bazel-bin/cyber/mainboard", 10 "args": ["-d","/apollo/modules/drivers/gnss/dag/gnss.dag"], 11 "stopAtEntry": false, 12 "cwd": "${workspaceFolder}", 13 "environment": [], 14 "externalConsole": false, 15 "MIMode": "gdb", 16 "setupCommands": [ 17 { 18 "description": "Enable pretty-printing for gdb", 19 "text": "-enable-pretty-printing", 20 "ignoreFailures": true 21 } 22 ] 23 } 24 ] 25}
▲调试Apollo板块
本文部份内容参考连接
*《Vscode-insiders 的 docker扩展》
https://code.visualstudio.com/docs/remote/containers
*《使用Visual Studio Code编译、调试Apollo项目》
https://blog.csdn.net/davidhopper/article/details/79819587
*《使用GDB调试Apollo项目》
https://blog.csdn.net/davidhopper/article/details/83445976
*《使用GDB调试Apollo单元测试程序》
https://blog.csdn.net/davidhopper/article/details/82589722
*《Apollo 3.5 各功能模块的启动过程解析》
https://blog.csdn.net/davidhopper/article/details/85248799