本文做者: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