根據VisualGDB官網(https://visualgdb.com)的幫助文檔大致翻譯而成。主要是作為個人學習記錄。有錯誤的地方,Robin歡迎大家指正。
本文介紹如何使用VS和VisualGDB開發這樣的項目:用VisualGDB CMake Project System來開發駐留在Linux機器上的項目。
常規的VisualGDB項目,有的需要從Windows端下載源文件和頭文件,有的需要使用難以維護的共享文件夾。而直接訪問的項目使得VS能夠直接編輯Linux機器上的文件,保證你總是使用文件的最新版本。
進行如下步驟之前,確保安裝VisualGDB5.3或更新版本。
1 打開VisualGDB Linux項目向導
啟動VS,打開VisualGDB Linux Project向導:
2 創建基於CMake項目
只有基於CMake的項目,VisualGDB才能使用SSH直接訪問。選擇”Create a new Project”->”Use CMake”,並勾選”Use the advanced CMake Project Subsystem”復選框:

3 選擇Linux機器
在下一頁選擇你的Linux機器:

4 配置源碼訪問
在子頁面”Source code access”,選擇”Access the sources directly over SSH”,並點擊”Finish”來創建項目:

5 構建項目
通過”Ctrl-Shift-B”來build該項目:

6 調試項目
放置斷點,並按F5開始調試項目:

7 查看項目的Windows文件夾
檢查項目的Windows文件夾,發現該文件夾下既不包含源碼文件,也不包含構建的二進制文件,只是包含solution文件、VisualGDB項目文件以及IntelliSense緩存:

8 VS里觀察遠程文件
在VS里,將鼠標懸在源文件tab上,可以看到,對於遠程項目,路徑是”vgdbssh://”這樣的語法模式。

9 打開終端
在Solution Explorer中,在target上右鍵,然后選擇”Open Terminal Here”:

10 安裝”zlib”庫
下面在Linux機器上安裝”zlib”庫,並展示VisualGDB如何自動識別它。在SSH Console里運行” sudo apt-get install zlib1g-dev”:

11 調用zlib中的函數
一旦zlib安裝成功后,源文件中包含<zlib.h>頭文件。觀察IntelliSense如何即時提示,而不需要同步任何目錄:

在源碼中調用函數zlibVersion(),可以看到,由於缺少被調用函數的定義,鏈接(link)會失敗:

打開主程序target的屬性頁,在”Linked Libraries field”中添加”z”:

對目標進行調試,確保函數正確調用:

12 VisualGDB自動編輯CMakeLists文件
觀察一下VisualGDB如何在CMakeLists.txt文件中編輯target_link_libraries()聲明:

13 添加新的源文件
通過”Add”->”New Item”來添加一個新的源文件,也可以remove該文件(選擇”Remove”,而不是”Delete”,使得文件繼續保留在磁盤上)。然后保存項目:

14 添加已存在的項
選擇”Add”->”Existing Item”:

觀察一下,VisualGDB如何在Linux機器上瀏覽遠程文件系統,就像在本地Windows瀏覽一樣:

15 修改項目屬性
Solution Explorer中,在項目上右擊,選擇”VisualGDB Project Properties”:

VisualGDB Project Properties窗口允許編輯各種VisualGDB專有的項目屬性。比如,可以明確設定cmake的位置,或者添加”-DCMAKE_VAR_NAME=VALUE”參數來修改項目的配置:

16 Linux機器上運行CMake來構建項目
VisualGDB CMake項目是自治的(self-sufficient),我們也可以在Linux機器上運行CMake來構建它們:

17 高度優化的緩存機制
VisualGDB采用高度優化的緩存機制來避免一次又一次地下載同一個文件。它在CodeDB\<project>\VFSCache目錄下保持着相關文件的緩存拷貝,並周期性地檢測相關的遠程目錄是否變化。
常規的項目需要提前下載整個include目錄和源文件目錄,而直接訪問的項目只有需要時才去讀取相應的文件,所以這種方式性能更好且更加簡單清晰。
如果想查看遠程FS緩存的內部狀態,可以通過”View”->”Clang IntelliSense Diagnostics Console”->”Remote FS”:

這個控制台將會顯示從遠程Linux機器羅列目錄及獲取文件所耗費的精確時間,所以你就可以快速檢查你的網絡能否滿足直接訪問模式所需的網絡性能。
