1. 程式人生 > >使用VS2017除錯Linux C++程式碼

使用VS2017除錯Linux C++程式碼

VS2017版本現已支援開發Linux專案,就是在VS上面寫程式碼,而編譯和執行是在Linux環境下。

使用場景:

假如,程式碼最終是執行在Linux系統上,而我們又不想在Linux環境下寫程式碼,想借用VS強大的開發功能做開發,那麼就可以在VS上面建立一個Linux專案。

設定:

專案建好之後,需要設定遠端連線,指定程式碼最終要執行的目標平臺。

編譯:

專案編譯的時候,VS會把程式碼拷貝到Linux對應目錄下面,然後呼叫Linux的g++對專案進行編譯。編譯過程中如果有什麼錯誤都會顯示在VS的編譯輸出中,就跟開發普通Windows程式一樣。

除錯:

除錯的時候也可以給程式碼下斷點,實際的除錯工作是Linux環境中gdb乾的,VS中只是顯示除錯資訊。這樣除錯起來要比在Linux環境下方便很多。

使用演示:

下面簡單演示一下使用VS建立Linux程式:
這裡寫圖片描述
建立好之後,需要準備好Linux環境,確保Linux環境中已經安裝了g++ gdb gdbserver。
例如,我是在虛擬機器中裝了一個CentOS系統,按照VS提供的教程,執行yum install openssh-server g++ gdb gdbserver,安裝好相關軟體。

在執行的時候提示gdbserver沒有安裝,後來在CentOS裡面執行yum install gdb-gdbserver安裝了gdbserver就好了。
在我們第一次編譯執行專案的時候會提示連線Linux主機
這裡寫圖片描述

選項 內容
Host name Linux主機ip地
Port 使用預設22
User name Linux系統中的使用者名稱,例如,root
Authentication type 選用Password
Password 使用者密碼

連線好之後,就可以執行程式了。
通過 除錯->Linux控制檯 可以看到執行結果
這裡寫圖片描述

使用技巧:

在開發過程中需要注意的是,許多Linux系統標頭檔案在Windows本地沒有。所以,在編寫程式碼的時候,如果包含Linux系統檔案,IDE會提示沒有找到標頭檔案或者找不到符號等問題(實際編譯是沒有問題

的,因為編譯是在Linux環境下編譯的,相應的標頭檔案也能找到)。使用VS進行開發的目的就是便於開發和除錯,沒有了程式碼補全和提示,那和使用vim就沒多大區別了。

對於這個問題,可以這樣解決:將Linux系統下/usr/include/ 目錄下的檔案全部複製到Windows下的C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\Linux\include\usr\local目錄下。這樣IDE就能找到這些標頭檔案了,在編寫程式碼的時候也就能很好的使用VS各種補全功能,大大方便了開發。
如果要引用Linux下系統目錄之外的標頭檔案,要在專案屬性附加包含目錄中新增,新增的路徑是Linux下路徑,如:/home/myproject/include。

編譯過程中如果需要用到的靜態庫,就要在專案屬性中:連結器->常規->附加庫目錄中新增對應的庫路徑(寫Linux環境下的絕對路徑),在連結器->輸入->庫依賴項裡面寫上需要的庫名稱,去掉名稱裡面的lib和副檔名.a。例如:libuser.a就是user。

總之在編譯階段需要的檔案配置實際都是在Linux環境下的。比如在專案中使用到了第三方庫,需要引用標頭檔案以及靜態庫,動態庫。那這些標頭檔案,庫檔案都應該存在於Linux環境中,要保證專案在編譯階段能夠在Linux環境下找到對應標頭檔案和庫檔案,在執行的時候也能找到對應的動態庫。

動態庫配置Linux環境變數就可以了,比如生成的可執行檔案在執行的時候需要一個.so檔案,如果這個.so檔案在系統庫目錄下,就不需要再去設定了。如果在使用者自定義的目錄下,就需要配置使用者環境變數或者系統環境變數。比如修改一個使用者的環境變數,進入該使用者目錄下,修改.bashrc檔案新增LD_LIBRARY_PATH=自定義動態庫目錄。修改完之後記得使用source .bashrc命令使修改生效。

#將使用者根目錄下的lib目錄新增到動態庫目錄,這樣該使用者的執行檔案再執行的時候就會再這個目錄中查詢相應的.so檔案
LD_LIBRARY_PATH=$HOME/lib  
export LD_LIBRARY_PATH

對於有些標頭檔案也需要配置在Windows本地,這樣只是為了方便編碼。配置的方法就是,在專案屬性->VC++目錄->包含目錄,這裡配置就可以,實際上對於Linux專案來說,這裡可配置也可不配置,配置只是為了IDE找到標頭檔案,方便編碼。

相關推薦

使用VS2017除錯Linux C++程式碼

VS2017版本現已支援開發Linux專案,就是在VS上面寫程式碼,而編譯和執行是在Linux環境下。 使用場景: 假如,程式碼最終是執行在Linux系統上,而我們又不想在Linux環境下寫程式碼,想借用VS強大的開發功能做開發,那麼就可以在VS上面建立

手把手教你除錯Linux C++ 程式碼

軟體除錯本身就是一項相對複雜的活動,他不僅要求除錯者有著清晰的思路,而且對除錯者本身的技能也有很高的要求。Windows下Visual Studio為我們做了很多的工作,使初學者基本上可以獲得一個所見即所得的除錯體驗,相對來說也比較容易上手。然而在linux平臺下,一切都

vs2017搭建linux c++開發環境

學習 桌面 .com 無法 zh-cn href logs aic ice segmentfault對應博文頁面:https://segmentfault.com/a/1190000016300215 最近一直在閱讀ovs的源碼,看到用戶態代碼的時候,需要對用戶態的代碼進行

VisualStudio2017+SSH+WSL 開發除錯Linux C/C++

編寫目的 當你點開該部落格時,我假設你: 對VisualStudio IDE 具有一定的瞭解/使用經驗,具體體現在你能夠新建專案、配置專案、編譯、連結、除錯; 對Linux有一定了解/使用經驗,具體體現在能夠使用基本的命令,並開發過簡單的Linux C/C+

在Android Studio上除錯原生C++程式碼,即遇到的坑

1.首先安裝LLDB,在tools->Android->sdk manager 中的SDK tools中找到LLDB並安裝. 2.gradle-experimental:0.7.0中debuggable預設設定為了true,如果是早期版本,需要在gradle中n

Windows下開發、除錯Linux C/C++程式

背景 據我所知,開發Linux C/C++ 程式的一般方式,如下: ² 使用SecureCRT+UltraEdit(FTP)工具遠端編輯、編譯(Makefile+gcc)、除錯(gdb)Linux程式。 ² Windows 上裝Linux虛擬機器,在虛擬機器上使用Vim、g

linux c 程式碼測試之記憶體越界及記憶體洩露

 記憶體越界是我們軟體開發中經常遇到的一個問題。不經意間的複製常常導致很嚴重的後果。經常使用memset、memmove、strcpy、strncpy、strcat、sprintf的朋友肯定對此印象深刻,下面就是我個人在開發中實際遇到的一個開發問題,頗具典型。 #

linux系統下如何在vscode中除錯C++程式碼

本篇部落格以一個簡單的hello world程式,介紹在vscode中除錯C++程式碼的配置過程。 1. 安裝編譯器 vscode是一個輕量的程式碼編輯器,並不具備程式碼編譯功能,程式碼編譯需要交給編譯器完成。linux下最常用的編譯器是gcc,通過如下命令安裝: sudo apt-get instal

VS2017 Linux C++引用自定義的動態庫

++ -1 undefined mage 編譯運行 linux下 lin 套路 log 前一篇博客講了用系統庫libpthread.so的例子,只需要在項目屬性頁的[C++->命令行參數]和[鏈接器->命令行參數]中加上對應參數(比如-pthread)即可,然後

StyleCop C#程式碼規範外掛============>VS2017外掛

外掛中有許多預設的規則,其中部分預設規則比較炒蛋     比如 :  引用必須寫在名稱空間內  在網上查詢發現 : SA1200 就是這個規則 右鍵 分析器 ==>點選 ===>  開啟活動規約集 現在去

Linux C/C++】 第07講 gdb除錯工具詳解

     當你需要單步跟蹤除錯的時候,就必然會用到gdb工具,不同於VS方便的除錯方式,gdb的除錯並不是那麼的方便直觀。不要降低熱情,熟練以後你會發現Linux下的程式設計方式非常好用。       一、簡介   &

Linux c++,用訊號量實現消費者生產者佇列(程式碼可直接通過編譯)

//用訊號量實現的一個消費者生產者佇列, #include <iostream> #include <pthread.h> #include <semaphore.h> #include <errno.h> #include <queue>

C++:將C++工程從VC6.0工程升級到VS2017所遇到的程式碼不相容問題集合

一、errorC2440:訊息相應函式型別不能轉化 問題描述 VS2017編譯提示以下兩個問題: (1)errorC2440 “static_cast”: 無法從“UINT (__thiscall CSizingControlBar::* )(CPoint)”轉換為

eclipse除錯C程式碼時printf()不能輸出到控制檯的解決方法

1、問題 在ecplise下使用CDT開發C/C++程式中,使用debug除錯時,到了printf 列印函式,在console視窗中並沒有打印出資訊來,停止後才會有輸出。 2、原因 在debug除錯時, eclipse 將輸出的內容存放到了輸出快取區中,沒有及時

Linux c】大型專案的除錯技巧

巧妙利用列印資訊: 直接在函式裡面呼叫void print_trace(),就可以找到呼叫它的函式的層級關係 printf("!!!!!%s,%s,%d\n", __FILE__,__FUNCTION__, __LINE__); printf("!!!!!test->

vs2017 c++程式碼可以像c#程式碼編寫那樣自動選中下拉框。

vs2017是中文專業版,工具 ->選項->文字編輯器->c/c++ 高階->  右側的 intelliSense 將主動提交成員列表改為True,就可以實現敲程式碼的時候自動預設選擇。就不用上下鍵選擇了。實心框選中之後,直接按enter就可

Linux下靠譜的獲取本機IP的C程式碼

這裡寫程式碼片http://blog.csdn.net/langeldep/article/details/8306603 正在做一個網路程式設計的任務,多臺裝置向伺服器傳送圖片,傳送圖片的時候同時告訴伺服器自己的IP。伺服器根據IP來區分不同的裝置,將圖片存

利用VS2017編譯、除錯Linux程式

VS2017提供了交叉編譯的功能。即可在windows機器上使用VS方便的編輯、除錯Linux機器上的程式。 大致流程是這樣的: 1、在windows機器上編輯程式碼; 2、VS通過SSH將程式碼傳送到Linux機器上進行編譯、連結; 3、呼叫Linux機器上的GDB

eclipse 遠端圖形化除錯嵌入式linux c arm(beaglebone black),解決常見除錯問題

1. eclipse遠端除錯的具體配置: 參考該網頁上的視訊http://www.eeboard.com/bbs/thread-15454-1-3.html (國外以小哥做的,講的非常詳細) 2. eclipse debug的具體設定說明: (對於遠端除錯的細節說明,防止

CodeBlocks除錯C&C++程式碼的方法

CodeBlocks除錯C&C++程式碼的方法 CodeBlocks 的好處很多,例如跨平臺,小巧。如果你厭倦了Visual studio 的龐大,Eclipes的啟動緩慢,那你不妨試試CB。好了閒話少說,下面進入正題。 CodeBlock 配置