查看原文
其他

开发者说丨使用 Vscode-insiders 的docker扩展 调试Apollo项目

杨鸿城 Apollo开发者社区 2022-07-29


在Apollo开发者社区中,经常被问及的一个问题是:用什么IDE工具进行开发?


Apollo开发者社区荣誉布道师—贺博士曾经写过一篇博客使用Vscode编译调试Apollo项目,介绍了如何用Vscode结合Gdb进行调试,为开发者提供了调试方法。


社区优秀开发者—杨鸿城近期发现一种更为简便的方式可以用Vscode-insiders进行Apollo项目调试,操作体验非常接近IDE,故写一篇教程分享给大家,希望能给广大开发者带来一定的帮助。



  以下,ENJOY  




VsCode是微软第一款支持Linux的轻量级代码编辑器,其功能介于编辑器与IDE之间,但更倾向于一个编辑器。Vscode有两个版本,蓝色的Vscode是非常稳定的发行版本,Vscode-insiders,相当于Bate版本,测试版,会有一些新的功能。


本文使用Vscode-insiders 的Docker 和Remote - Containers 扩展,可以便捷地调试Apollo项目,而蓝色的Vscode不具备该调试功能。






Vscode-insiders有两种安装方式,分别是Apt安装Deb包安装。Vscode-insiders 和蓝色的Vscode 可以同时使用,安装Vscode-insiders 无需卸载蓝色的Vscode。


Apt方式安装:

1sudo apt-get update
2sudo apt-get install code-insiders

Deb方式安装:


 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



更多话题讨论、技术交流

可以添加『Apollo小哥哥』为好友

进开发者交流群





* 以上内容为开发者原创,不代表百度官方言论。

内容来自CSDN:

https://blog.csdn.net/weixin_43426627/article/details/99823912,欢迎大家收藏点赞。已获开发者授权,原文地址请戳阅读原文。






您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存