在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用VSCode編譯Apollo項目,使用VSCode本地調試Apollo項目

YB7m_Apollo_Dev ? 來源:未知 ? 作者:李倩 ? 2018-04-10 09:31 ? 次閱讀

前言

1. 我已將本文所述的配置文件上傳到Apollo項目的GitHub倉庫,大家直接下載使用即可。

2. 我之前已寫過一篇博客《使用Visual Studio Code編譯Apollo項目》(https://blog.csdn.net/davidhopper/article/details/79349927),這篇文章內容不夠全面,這里給出更為詳細的闡述。

Apollo項目以其優異的系統架構、完整的模塊功能、良好的開源生態及規范的代碼風格,受到眾多開發者的喜愛和好評。然而,該項目使用命令行編譯和調試,不能使用IDE開發,既不直觀,也不利于提高效率。我有點追求完美,必須想辦法讓Apollo項目能在IDE中編譯、調試。

Visual Studio Code(以下簡稱VSCode)是微軟第一款支持Linux的輕量級代碼編輯器,其功能介于編輯器與IDE之間,但更傾向于一個編輯器。優點是運行速度快,占用內存少,使用方法與Visual Stuio類似。缺點在于,與Visual Studio、QT等IDE相比,功能還不夠強大。我認為,Windows中最強大的C++ IDE為Visual Studio,Linux中最強大的C++ IDE為QT。

Apollo項目目前只支持Ubuntu系統(Mac OS系統部分支持),Windows系統中的Visual Studio自然排除在外;此外,Apollo項目使用Bazel編譯,而QT目前只支持QMake和CMake工程,因此只能忍痛割愛。在無法使用上述兩種IDE的前提下,退而求次選用VSCode。

我寫了幾個配置文件,允許使用VSCode編譯、調試Apollo項目,下面對其進行具體闡述,希望能給廣大開發者帶來一定的幫助。

{ 一 }

使用VSCode編譯Apollo項目

首先從GitHub網站(https://github.com/ApolloAuto/apollo)下載Apollo源代碼,可以使用git命令下載,也可以直接通過網頁下載壓縮包。源代碼下載完成后,將其放置到合適的目錄。使用VSCode編譯Apollo項目有一個前提,就是在你的機器上已經順利安裝了Docker。Apollo之前版本提供了一個“install_docker.sh”腳本文件,因為很多開發者反映可能出錯,Apollo項目組已將該文件移除。現在要安裝Docker就只能參考Docker官方網站(https://www.docker.com/)的幫助文檔了。

1.1編譯方法

打開“Visual Studio Code”,執行菜單命令“文件->打開文件夾”,在彈出的對話框中,選擇“Apollo”項目源文件夾,點擊“確定”,如下圖所示:

之后,執行菜單命令“任務->運行生成任務”或直接按快捷鍵“Ctrl+Shift+B”(與Visual Studio和QT的快捷鍵一致)構建工程,若之前沒有啟動過Docker,則編譯時會啟動Docker,需在底部終端窗口輸入超級用戶密碼,如下圖所示:

命令執行完畢,若在底部終端窗口出現“終端將被任務重用,按任意鍵關閉。”信息(如下圖所示),則表示構建成功。整個過程一定要保持網絡暢通,否則無法下載依賴包。

1.2配置文件解析

我在.vscode/tasks.json文件中總共配置了四個常見的任務:build the apollo project(構建Apollo項目)、run all unit tests for the apollo project(運行Apollo項目的所有單元測試)、code style check for the apollo project(Apollo項目的代碼風格檢查)、clean the apollo project(清理Apollo項目)。其中第一個任務是默認生成任務,可以直接按快捷鍵“Ctr+Shift+B”調用,其他任務可通過執行菜單命令:任務->運行任務(R)…,在彈出的窗口中,選擇對應選項即可,如下圖所示:

下面是具體的配置內容,請參考里面的注釋來調整編譯任務以滿足你的構建需求:

{ “version”: “2.0.0”,

“tasks”: [

{

“label”: “build the apollo project”,

“type”: “shell”,

// 可根據“apollo.sh”提供的選項來調整編譯任務,例如:build_gpu

“command”: “bash apollo_docker.sh build”,

“group”: {

“kind”: “build”,

“isDefault”: true // default building task invoked by “Ctrl+Shift+B”

},

// 格式化錯誤信息

“problemMatcher”: {

“owner”: “cc”,

“fileLocation”: [

“relative”,

“${workspaceFolder}”

],

“pattern”: {

“regexp”: “^(.*):(\d+):(\d+):\s+(warning|error):\s+(.*)$”,

“file”: 1,

“line”: 2,

“column”: 3,

“severity”: 4,

“message”: 5

}

}

},

{

“label”: “run all unit tests for the apollo project”,

“type”: “shell”,

“command”: “bash apollo_docker.sh test”,

“problemMatcher”: {

“owner”: “cc”,

“fileLocation”: [

“relative”,

“${workspaceFolder}”

],

“pattern”: {

“regexp”: “^(.*):(\d+):(\d+):\s+(warning|error):\s+(.*)$”,

“file”: 1,

“line”: 2,

“column”: 3,

“severity”: 4,

“message”: 5

}

}

},

{

“label”: “code style check for the apollo project”,

“type”: “shell”,

“command”: “bash apollo_docker.sh lint”,

“problemMatcher”: {

“owner”: “cc”,

“fileLocation”: [

“relative”,

“${workspaceFolder}”

],

“pattern”: {

“regexp”: “^(.*):(\d+):(\d+):\s+(warning|error):\s+(.*)$”,

“file”: 1,

“line”: 2,

“column”: 3,

“severity”: 4,

“message”: 5

}

}

},

{

“label”: “clean the apollo project”,

“type”: “shell”,

“command”: “bash apollo_docker.sh clean”,

“problemMatcher”: {

“owner”: “cc”,

“fileLocation”: [

“relative”,

“${workspaceFolder}”

],

“pattern”: {

“regexp”: “^(.*):(\d+):(\d+):\s+(warning|error):\s+(.*)$”,

“file”: 1,

“line”: 2,

“column”: 3,

“severity”: 4,

“message”: 5

}

}

}

]}

1.3可能存在的問題及解決方法1.3.1 編譯時遇到“ERROR: query interrupted”錯誤

這是由于bazel內部緩存不一致造成的。

解決方法:

按任意鍵退出編譯過程,在VSCode的命令終端窗口(如果未打開,按快捷鍵“Ctrl + `”開啟)執行如下命令進入Docker環境:

1 bash docker/scripts/dev_into.sh

在Docker環境中輸入如下命令,執行bazel的清理緩存任務(一定要保持網絡暢通,以便成功下載依賴包,否則該命令即使執行一萬次也不會奏效):

1 bazel query //...

最后輸入exit命令退出Docker環境,按快捷鍵“Ctrl+Shift+B”,重新執行構建任務。

1.3.2 編譯時長時間停留在“Building: no action running”界面

這是由于當前系統中存在多個不同版本的Docker或者是bazel內部緩存不一致造成的。

解決方法:

按快捷鍵“Ctrl+C”鍵終止當前構建過程,在VSCode的命令終端窗口(如果未打開,按快捷鍵“Ctrl + `”開啟),使用下述方法中的任意一種,停止當前運行的Docker:

1234 # 方法1:停止當前所有的Apollo項目Dockerdocker stop $(docker ps -a | grep apollo | awk '{print $1}')# 方法2:停止當前所有的Dockerdocker stop $(docker ps -aq)

執行VSCode的菜單命令:任務->運行任務(R)…,在彈出的窗口中,選擇 “clean the apollo project”(清理Apollo項目)。待清理完畢后,按快捷鍵“Ctrl+Shift+B”,重新構建Apollo項目。

1.3.3 編譯時出現類似“Another command (pid=2466) is running. Waiting for it to complete…”的錯誤

這是由于在其他命令行終端進行編譯或是在之前編譯時按下“Ctrl+C”鍵強行終止但殘留了部分編譯進程所引起的。

解決方法:

按快捷鍵“Ctrl+C”鍵終止當前構建過程,在VSCode的命令終端窗口(如果未打開,按快捷鍵“Ctrl + `”開啟),使用如下命令終止殘留的編譯進程:

123456789 # 1.進入Dockerbash docker/scripts/dev_into.sh# 2.殺死Docker中殘留的編譯進程pkill bazel-real# 3.查看Docker中是否殘留bazel-real進程,若有則按“q”退出,再次執行步驟2。# 也可使用“ps aux | grep bazel-real”查看top# 4.退出Dockerexit

按快捷鍵“Ctrl+Shift+B”,重新執行構建任務。

{ 二 }

使用VSCode本地調試Apollo項目

Apollo項目運行于Docker中,不能在宿主機(所謂宿主機就是運行Docker的主機,因為Docker服務像寄宿于主機中,故有此稱呼)中直接使用GDB調試,而必須先在Docker中借助GDBServer創建調試服務進程,再在宿主機中使用GDB連接Docker中的調試服務進程來完成。下面介紹具體操作方法:

2.1前提條件2.1.1 編譯Apollo項目需帶調試信息

編譯Apollo項目時需使用build或build_gpu等帶調試信息的選項,而不能使用build_opt或build_opt_gpu等優化選項。

2.2.2 Docker內部已安裝GDBServer

進入Docker后,可使用如下命令查看:

1 gdbserver --version

若提示類似如下信息:

1234 GNU gdbserver (Ubuntu 7.7.1-0ubuntu5~14.04.3) 7.7.1Copyright (C) 2014 Free Software Foundation, Inc.gdbserver is free software, covered by the GNU General Public License.This gdbserver was configured as "x86_64-linux-gnu"

則表示Docker內部已安裝了GDBServer(我已請Apollo項目組老師將GDBServer預裝至Docker內部,正常情況下應該能看到上述提示信息)。若提示如下信息:

1 bash: gdbserver: command not found

則表示Docker內部未安裝GDBServer,可使用如下命令安裝:

1 sudo apt-get install gdbserver

2.2Docker內部的操作2.2.1 啟動Dreamview后臺服務程序

進入Docker,啟動Dreamview,命令如下:

1234567 cd your_apollo_project_root_dir# 如果沒有啟動Docker,首先啟動,否則忽略該步bash docker/scripts/dev_start.sh -C# 進入Dockerbash docker/scripts/dev_into.sh# 啟動Dreamview后臺服務bash scripts/bootstrap.sh

2.2.2 啟動待調試模塊

啟動待調試模塊,既可使用命令行操作,也可借助Dreamview界面完成。我肯定喜歡使用Dreamview界面操作了,下面以調試“planning”模塊為例進行說明。

打開Chrome瀏覽器,輸入網址:http://localhost:8888/,打開Dreamview界面,打開“SimControl”選項,如下圖所示:

點擊左側工具欄“Module Controler”標簽頁,選中“Routing”和“Planning”選項,如下圖所示:

點擊左側工具欄“Default Routing”標簽頁,選中“Route: Reverse Early Change Lane”或其中任意一個選項,發送“Routing Request”請求,生成全局導航路徑,如下圖所示:

2.2.3 查看“Planning”進程ID

使用如下命令,查看“Planning”進程ID:

1 top

結果類似下圖,可以看到“Planning”進程ID為4147,請記住該ID。按“q”退出“top”界面。

還可使用如下命令查看:

1 ps aux | grep planning

結果類似下圖,可以看到“Planning”進程ID為4147。

2.2.4 使用GDBServer附加調試“Planning”進程

接下來需要進行我們的關鍵操作了,使用GDBServer附加調試“Planning”進程,命令如下:

1 sudo gdbserver :1111 --attach 4147

上述命令中,“:1111”表示開啟端口為“1111”的調試服務進程,“4147”表示步驟2.2.3中查到的“Planning”進程ID。若結果如下圖所示,則表示操作成功。

重新開啟一個命令終端,進入Docker后,使用如下命令可看到“gdbserver”進程已正常運行:

1 ps aux | grep gdbserver

2.2.5 使用腳本文件啟動GDBServer

我寫了兩個腳本文件:scripts/start_gdb_server.sh、docker/scripts/dev_start_gdb_server.sh,其中前者用于在Docker內部啟動GDBServer,后者直接在宿主機(Docker外部)啟動GDBServer。

假設調試planning模塊,端口號為1111,scripts/start_gdb_server.sh的使用方法為:

1234 # 進入Dockerbash docker/scripts/dev_into.sh# 啟動gdbserverbash scripts/start_gdb_server.sh planning 1111

假設調試planning模塊,端口號為1111,docker/scripts/dev_start_gdb_server.sh的使用方法為:

12 # 在宿主機中(Docker外部)直接啟動gdbserverbash docker/scripts/dev_start_gdb_server.sh planning 1111

在2.3節我還將繼續配置VSCode文件,以便在VSCode中直接按快捷鍵“F5”就可啟動調試。

start_gdb_server.sh的內容如下:

#!/usr/bin/env bashfunction print_usage()

{

RED=‘

主站蜘蛛池模板: 欧美性猛交xxxxbbbb | 国产久爱青草视频在线观看 | aⅴ一区二区三区 | 久久狠色噜噜狠狠狠狠97 | 欧美一区二区三区免费高 | 免费免费啪视频视频观看 | 国产一级特黄aa大片爽爽 | 天天综合网站 | 国产视频首页 | 91男人| 免费你懂的 | 伊人久久大 | 天天添天天操 | 国产视频首页 | 欧美成人黄色 | 日本加勒比在线播放 | www.87福利| 日本视频一区二区 | 天天爱天天做天天干 | 很黄很黄的网站免费的 | 天天干夜夜草 | 国产小视频在线观看www | 五月天婷婷网址 | 最新日韩中文字幕 | 日本h片在线观看 | 狠狠色丁香婷婷综合 | 五月月色开心婷婷久久合 | 狠狠干狠狠操视频 | 一区二区免费播放 | 天天噜噜日日噜噜久久综合网 | 久久综合狠狠综合久久综合88 | 亚洲a影院 | 1024手机免费看 | 亚洲大香伊人蕉在人依线 | 国产高清成人mv在线观看 | 奇米影色777四色在线首页 | 欧美色插 | 日本一二线不卡在线观看 | 7086bt伙计 福利一区 | 性刺激的欧美三级视频 | 国产美女流出白浆在线观看 |