最近一直在閱讀ovs的源碼,看到用戶態代碼的時候,須要對用戶態的代碼進行調試,一開始想直接使用linux中的GDB進行調試,可是ovs的工程太過於複雜,從網上找了些文章,發現vs2017可以支持linux c++程序的調試,搗鼓了一下午,遇到了一些坑,終於搭建好了開發環境。html
最新版的vs 2017支持linux環境編程,與傳統vs上的windows編程不一樣的是,vs2017 所須要的Linux環境須要搭載在一個linux的服務器上,vs 2017 至關於將windows系統和這個linux系統之間創建了某種映射,能夠將代碼複製到linux中對應的目錄中,而且windows系統中的vs 2017可以看到運行的狀況,甚至是對代碼進行斷點調試。linux
window 10操做系統,vs 2017 community版,VMware12.5.7android
在VMware中安裝ubuntu14桌面版c++
官網下載地址https://visualstudio.microsof...shell
從官網下載最新的vs 2017,在安裝的過程當中須要注意,若是你須要搭建linux c++環境,須要勾選「使用c++的linux開發」工具集,見下圖編程
在ubuntu中安裝好c++環境,由於vs 2017須要經過ssh登錄ubuntu系統,因此也須要安裝好ssh服務,命令以下:ubuntu
sudo apt-get install openssh-server g++ gdb gdbserver
開始ssh服務:segmentfault
sudo service ssh start
打開vs2017,步驟以下,文件-->新建項目-->跨平臺-->linux->控制檯應用程序(linux)windows
新建完成項目以後,vs2017自動生成一個簡單的maic.cpp文件服務器
菜單欄選擇 調試->cross platform->add 將剛纔創建的Ubuntu服務器用戶信息輸入進去
右鍵解決方案,能夠看到當前程序的屬性頁面,點擊配置屬性->常規->遠程生成計算機,選擇剛剛新建的帳戶,能夠看到,在該頁面下,默認的遠程生成根目錄在"~/projects"下面,待會兒能夠看到在ubuntu對應的目錄下會生成項目的代碼。
菜單欄選擇調試->Linux Console打開linux程序的控制檯
能夠在程序中打斷點,點擊調試按鈕進行運行,能夠看到控制檯打印出信息
登錄ubuntu,在~/projects目錄下面能夠看到新生成的項目文件夾「test」
上述是一個簡單的開發演示,在實際的工做中,代碼可能很複雜。由於這幾天在學習linux的IO多路複用機制,從網上找了一個稍微複雜的通訊程序,代碼來自於博客https://www.cnblogs.com/Anker...,源代碼有一處錯誤,需加上#include <arpa/inet.h>。這個程序的功能是客戶端向服務器發送信息,服務器接收輸出並原樣發送回給客戶端,客戶端接收到輸出到終端。其中使用一些linux中的庫文件。
在博客https://www.cnblogs.com/xylc/... 看到一個解決方法,將ubuntu下面/usr/include、/usr/local/include等目錄複製到vs的linux header path(在個人機器中,地址爲C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\Linux\include\usr)。
vs2017進行調試有兩種方式,gdb和gdb-server,能夠在菜單欄 調試->配置屬性->調試->調試模式中進行配置,關於這兩種模式的不一樣,官方文檔的解釋以下:
從網上找了不少的資料,從新更新了ubuntu中的gdbserver,結果仍是不行,由於我以前使用的是ubuntu17的server版本,無奈使用ubuntu14的桌面版,問題立馬獲得解決,目前仍然不知道gdbserver模型爲何沒法使用,若是有路過的大神看到,但願評論區能夠留言。
在運行gdb模式下運 行客戶端的時候,客戶端從控制檯接受數據的那一段代碼報Stopped (tty input)錯誤,經過看官方文檔發現gdb模式不支持控制檯交互,改爲gdbserver模式後能正常使用。
最終成功運行服務端和客戶端程序,先啓動服務端,再運行客戶端,下圖中分別爲服務端和客戶端運行狀況。當客戶端再控制檯輸入信息,服務端能接收,並回傳給客戶端在控制檯顯示。
使用Visual Studio 2017做爲Linux C++開發工具
做者: yearsj
轉載請註明出處: https://segmentfault.com/a/11...