vs2017搭建linux c++開發環境

来源:https://www.cnblogs.com/yearsj/archive/2018/09/06/9600682.html
-Advertisement-
Play Games

segmentfault對應博文頁面:https://segmentfault.com/a/1190000016300215 最近一直在閱讀ovs的源碼,看到用戶態代碼的時候,需要對用戶態的代碼進行調試,一開始想直接使用linux中的GDB進行調試,但是ovs的工程太過於複雜,從網上找了些文章,發現 ...


segmentfault對應博文頁面:https://segmentfault.com/a/1190000016300215

最近一直在閱讀ovs的源碼,看到用戶態代碼的時候,需要對用戶態的代碼進行調試,一開始想直接使用linux中的GDB進行調試,但是ovs的工程太過於複雜,從網上找了些文章,發現vs2017能夠支持linux c++程式的調試,搗鼓了一下午,遇到了一些坑,終於搭建好了開發環境。

最新版的vs 2017支持linux環境編程,與傳統vs上的windows編程不同的是,vs2017 所需要的Linux環境需要搭載在一個linux的伺服器上,vs 2017 相當於將windows系統和這個linux系統之間建立了某種映射,可以將代碼複製到linux中對應的目錄中,並且windows系統中的vs 2017能夠看到運行的情況,甚至是對代碼進行斷點調試。

開發環境

window 10操作系統,vs 2017 community版,VMware12.5.7

在VMware中安裝ubuntu14桌面版

vs 2017的安裝

官網下載地址https://visualstudio.microsoft.com/zh-hans/?rr=https%3A%2F%2Fwww.microsoft.com%2Fzh-cn%2F

從官網下載最新的vs 2017,在安裝的過程中需要註意,如果你需要搭建linux c++環境,需要勾選“使用c++的linux開發”工具集,見下圖

配置ubuntu環境

在ubuntu中安裝好c++環境,因為vs 2017需要通過ssh登陸ubuntu系統,所以也需要安裝好ssh服務,命令如下:

sudo apt-get install openssh-server g++ gdb gdbserver

開始ssh服務:

sudo service ssh start

vs2017創建linux項目

打開vs2017,步驟如下,文件-->新建項目-->跨平臺-->linux->控制台應用程式(linux)

新建完成項目之後,vs2017自動生成一個簡單的maic.cpp文件

菜單欄選擇 調試->cross platform->add 將剛纔建立的Ubuntu伺服器用戶信息輸入進去

右鍵解決方案,可以看到當前程式的屬性頁面,點擊配置屬性->常規->遠程生成電腦,選擇剛剛新建的賬戶,可以看到,在該頁面下,預設的遠程生成根目錄在"~/projects"下麵,待會兒可以看到在ubuntu對應的目錄下會生成項目的代碼。

菜單欄選擇調試->Linux Console打開linux程式的控制台

可以在程式中打斷點,點擊調試按鈕進行運行,可以看到控制台列印出信息

登陸ubuntu,在~/projects目錄下麵可以看到新生成的項目文件夾“test”

遇到問題

上述是一個簡單的開發演示,在實際的工作中,代碼可能很複雜。因為這幾天在學習linux的IO多路復用機制,從網上找了一個稍微複雜的通信程式,代碼來自於博客https://www.cnblogs.com/Anker/p/3261006.html,源代碼有一處錯誤,需加上#include <arpa/inet.h>。這個程式的功能是客戶端向伺服器發送信息,伺服器接收輸出並原樣發送回給客戶端,客戶端接收到輸出到終端。其中使用一些linux中的庫文件。

問題1 無法找到庫文件

在博客https://www.cnblogs.com/xylc/p/6533716.html?&from=androidqq 看到一個解決方法,將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)。

問題2 gdbserver模式無法使用

vs2017進行調試有兩種方式,gdb和gdb-server,可以在菜單欄 調試->配置屬性->調試->調試模式中進行配置,關於這兩種模式的不同,官方文檔的解釋如下:

  • 在“gdbserver”模式中,GDB 在本地運行,連接到在遠程系統上運行的 gdbserver。 請註意,這是 Linux 控制台視窗唯一支持的模式。
  • 在“gdb”模式中,Visual Studio 調試器驅動遠程系統上的 GDB,如果 GDB 的本地版本與目標電腦上安裝的版本不相容,則遠程系統上的 GDB 更易相容。 |

從網上找了很多的資料,重新更新了ubuntu中的gdbserver,結果還是不行,因為我之前使用的是ubuntu17的server版本,無奈使用ubuntu14的桌面版,問題立馬得到解決,目前仍然不知道gdbserver模型為什麼無法使用,如果有路過的大神看到,希望評論區可以留言。

問題3 錯誤Stopped (tty input)

在運行gdb模式下運 行客戶端的時候,客戶端從控制台接受數據的那一段代碼報Stopped (tty input)錯誤,通過看官方文檔發現gdb模式不支持控制台交互,改成gdbserver模式後能正常使用。

最終運行結果

最終成功運行服務端和客戶端程式,先啟動服務端,再運行客戶端,下圖中分別為服務端和客戶端運行情況。當客戶端再控制台輸入信息,服務端能接收,並回傳給客戶端在控制台顯示。

參考資料

部署、運行和調試 Linux 項目

使用Visual Studio 2017作為Linux C++開發工具


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • //獲取時間戳 .net framework /* DateTime dt = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); int time = (int)(DateTime.Now - dt).TotalSecon... ...
  • 版權聲明:本文為博主原創文章,未經允許不得轉載。 在平常的工作中經常在兩個伺服器之間傳輸文件,而且經常從本地遠程登錄伺服器,每次都要輸入密碼顯然很沒效率,這時候該怎麼辦呢? 首先假設伺服器A和B,要想實現從A向B複製文件或者從B獲取文件,也就是: scp -r "some files in A" B ...
  • 第一步、網路模式設置為橋接模式 第二步、設置ip和掩碼      ens33為當前機器的網卡名稱   在文件尾部添加   [填寫自己的IP地址]         &ems ...
  • 參考 ...
  • 進程調度程式是多任務操作系統的基礎,它是確保進程能有效工作的一個內核子系統,負責決定哪個進程投入運行、何時運行以及運行多長時間。只有通過進程調度程式的合理調度,系統資源才能夠最大限度地發揮作用,多進程才會有併發執行的效果。在一組處於可運行狀態的進程中選擇一個來執行,是調度程式所需完成的基本工作。 在 ...
  • 今天在使用 fedora 安裝 chrome 的時候遇到了問題,今天進行將安裝過程進行記錄下來。需要安裝第三方軟體倉庫。 我們需要進行安裝 fedora-workstation-repositories 這個倉庫 使用 yum/dnf 命令 安裝並開啟chrome 倉庫,安裝這個 rpm 包就是在/ ...
  • 當我們進行重新安裝系統(fedora 28)的時候,需要初始安裝一些 gnome 插件,來進行完善我們的使用。 首先我們應該進行安裝 gnome-tweak 工具來進行定製化系統。 tweak 可以進行定製化系統和管理gnome 插件來進一步定製化系統。想要安裝 gnome插件可以訪問:https: ...
  • 1. CGroup(控制群組)、slice(切片)、scop、service 控制群組(control group)是linux kernel的一項功能, 該功能允許linux對RHEL7中systemd下掛載的所有進程按類別分組, 從而使得系統管理員可以按需對linux的系統資源(如CPU時間、系 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...