根據VisualGDB官網(https://visualgdb.com)的幫助文檔大致翻譯而成。主要是作為個人學習記錄。有錯誤的地方,Robin歡迎大家指正。
本文介紹如何在VS中創建靜態庫和動態庫,並用VisualGDB來調試它們。
首先我們用VisualGDB創建一個簡單的Linux應用程序,然后添加一個靜態庫和一個動態庫,並在調試器中測試它們。
為了嘗試本文中的步驟,你需要一台Windows機器和一台Linux機器:
- 兩個物理電腦;
- 一個Windows電腦及運行在其上的Linux虛擬機(使用VIRTUALBOX/VMWARE);
- 一個Linux電腦及運行在其上的Windows虛擬機(使用VIRTUALBOX/VMWARE)。
在你的Windows電腦上安裝好VisualGDB后,就可以開始下面的步驟了。
1 添加Linux主應用程序
根據《使用VS來開發Linux程序》,在VS中創建一個簡單的Linxu app。該項目的名稱為LinuxApp,構建這個app確保能夠調試它。
2 創建靜態庫
2.1 開始創建項目
在VS的Solution Explorer中,在solution項上右鍵,選擇”Add->New Project”:
2.2 啟動項目創建向導
現在開始創建靜態庫。保證已經選擇VisualGDB向導,並將該靜態庫項目的名稱命名為MyStaticLib,然后點擊”OK”:
2.3 選擇項目類型為靜態庫
選擇”Create a new project”->”Static library”->”Use MSBuild”,並點擊”Next”:
2.4 選擇Linux電腦
在下一頁選擇遠程Linux機器。保證和之前的應用程序在同一個機器上。
2.5 源碼訪問設置
采用默認方式配置源碼訪問方式,然后點擊”Finish”:
2.6 修改主應用程序的代碼
現在已經創建了一個新的靜態庫項目。接下來修改主應用程序的main源文件如下:
#include <iostream> #include "MyStaticLib/MyStaticLib.h" using namespace std; int main(int argc, char *argv[]) { char sz[] = "Hello, World!"; //Hover mouse over "sz" while debugging to see its contents cout << sz << MyStaticLibTest() << endl; //<================= Put a breakpoint here return 0; }
2.7 從主程序項目中引用庫項目
在編譯之前,需要從主程序項目中添加一個引用到庫項目:
2.8 在Add Reference窗口中勾選添加的庫
在Add Reference窗口中,勾選MyStaticLib:
2.9 構建solution
構建solution:
2.10 斷點調試靜態庫
在靜態庫的MyStaticLibTest()中加上斷點。開始調試后會進入這個斷點中。在call back窗口中,可以看到這個靜態庫函數被main()函數調用了:
3 添加動態庫
3.1 添加動態庫項目
在solution中添加一個新的動態庫。該動態庫的名稱為MyDynamicLib,並在Project Type頁面選擇”Shared Library”。其他步驟和第2節中添加靜態庫的步驟一樣。
3.2 從主程序項目中引用動態庫
動態庫項目創建成功后,從主應用程序中引用這個動態庫:
3.3 修改主程序源碼來調用動態庫函數
修改主程序的main源文件,在該文件中調用動態庫函數MyDynamicLibTest():
#include <iostream> #include "MyStaticLib/MyStaticLib.h" #include "MyDynamicLib/MyDynamicLib.h" using namespace std; int main(int argc, char *argv[]) { char sz[] = "Hello, World!"; //Hover mouse over "sz" while debugging to see its contents cout << sz << MyStaticLibTest() << MyDynamicLibTest() << endl; // Put a breakpoint here return 0; }
3.4 斷點調試動態庫
構建solution后。在MyDynamicLibTest()函數中放置斷點並啟動調試。進入該斷點后,在VS的Module窗口中可以觀察到加載的這個動態庫,以及加載的其他動態庫:
4 導出配置
配置基於VisualGDB的庫后,可以“導出”一些build settings,然后這些settings就自動添加到所有引用該庫的項目中。
比如,在MyDynamicLib Property頁面下,”Exported Settings”->”Preprocessor Definitions”,鍵入:USING_MY_DYNAMIC_LIB
然后在主應用程序中檢驗這個新添加的宏,確保能夠構建:
5 配置VisualGDB相關的settings
通過右鍵->VisualGDB Project Properties,可以為每個項目配置各種VisualGDB相關的settings:
如果你更喜歡這樣的開發環境:多個庫項目共享相同的通用settings(比如,deployment paths),你可以嘗試創建基於CMake的項目(參考:使用VS創建CMake Linux項目)。VisualGDB透明地將CMake集成到VS中,當Solution Explorer中有變化時,會自動編輯CMakeLists.txt文件。