vs生成linux服務器程序,從Visual Studio到Linux上調試C++代碼

從Visual Studio到Linux上調試C++代碼

04/30/2015

5 分鐘可看完

本文內容

[原文發表時間] 2015/4/29 10:00 PM

正如您可能已經聽說的那樣,Visual Studio 2015新推出了對Android開發的GDB支持。有趣的是,因為這項功能依賴GDB調試,我們完全可能稍加改動就實現針對其他同樣支持GDB的平臺(如Linux和Raspberry Pi)做代碼調試。在這篇博客中我將會分享在Linux,Raspberry Pi上遠程調試C++代碼的步驟。

因為這套方法是我在最初專門為Android設計的實施上修改得來,它有一定的局限性,但是它顯示了這項功能的潛力。這是我們為什么對GDB實施開源的一個很好的例子。還請注意這不是一個交叉編譯方案。您需要在Visual Studio中編輯源碼,再拿到Linux機器去編譯。一旦配置好了之后,您就可以觸發斷點以及逐行調試源代碼,除了對SSH連接做正確的設置以外不需要其他附加工作。

以下是步驟

下載Visual Studio 2015 RC。安裝類型中,選擇自定義安裝,并且選中交叉平臺手機開發下面的Visual C++手機開發。

從Putty下載站點中下載plink,putty,pscp和puttygen。

設置SSH連接到您的Linux安裝使用證書身份驗證。關于此項的一個不錯的概覽是在Azure上鏈接Linux的SSH使用指南。這些指南總體上足夠涵蓋從Windows連接到任何Linux機器,而不僅僅是那些運行Azure的機器。

通過Putty從您的Windows機器連接到Linux機器。系統將提示您的服務器主機密鑰不在注冊表中。選擇yes以將其添加到注冊表以使得主機受信。如果您不這樣做,您將在后面得到一個錯誤提示,但它并不能清晰地指明問題所在。

您需調試的代碼要放在本地機的C++ Makefile 工程項目里。

您將需要創建一個xml配置文件用來指定plink在哪兒,您的連接信息,在遠程機器上的exe文件地址以啟動GDB。以下是一個示例。

PipePath="plink.exe" PipeArguments="-i private.ppk user@server -batch -t gdb --interpreter=mi"

ExePath="/home/user/YourDir/exe" ExeArguments=""

TargetArchitecture="X64" WorkingDirectory="/home/user/YourDir" AdditionalSOLibSearchPath="">

7. 打開命令提示符窗口,在Visual Studio菜單中選擇視圖->其他窗口->命令提示符窗口。

8. 通過以下命令傳遞您的配置文件:

Debug.GDBLaunch /OptionsFile:[path] /Executable:foo

9. 享受在Linux上用VS2015遠程調試您的C++程序吧!

如果您想讓事情更加簡單,在第5步您可以在Makefile項目中指定以下命令為構建命令。

遠程復制您的文件:

pscp.exe -i private.ppk -r YourDir user@server:/home/user

遠程編譯:

plink.exe user@server -i private.ppk "cd ~/YourDir; g++ -g yourcode.cpp -o yourexecutable"

鑒于我上述的僅僅是對未來的預覽,以下是一些已知問題:

在開始以上的第8步后你將遇到一個錯誤信息,“無定義命令gdb”。一旦連接建立,我們的調試引擎試圖開始gdb,但是我們已經通過配置文件參數開始了調試。如果我們不是以這樣的方式開始,就不能正確建立起到GDB的連接,并且將孤立的gdb進程遺留在目的機上。

即使您在上面建立斷點,進入Main函數后的第一個代碼語句總會錯過。

無需輸入可執行文件的執行參數,因為執行參數應該已經包含在選項文件中了,所以即使輸入也不會被使用。

由于不支持交叉編譯您需要把您的工具鏈和gdb安裝在Linux目標機上。

如果您感覺這篇博客很有用或者您在使用中遇到任何問題,請在下面評論讓我們知道。我們也歡迎任何有助于提升的建議。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/541320.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/541320.shtml
英文地址,請注明出處:http://en.pswp.cn/news/541320.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java clock計時_Java Clock類| 實例的Instant()方法

java clock計時Clock Class Instant()方法 (Clock Class instant() method) instant() method is available in java.time package. Instant()方法在java.time包中可用。 instant() method is used to get the current instant that is used with this Clock. Instant()方法用于…

使用國內DOCKER鏡像源

在國內,通過Docker的pull和push命令訪問hub.docker時,網絡十分慢,而且會出現各種各樣的網絡連接問題。因此這里介紹下如何使用國內的鏡像源,這里以DaoCloud為例。注冊DaoCloud用戶;注冊完成后,會進入dashboard頁面&…

linux命令top查看進程,linux 查看進程的命令(top)

標簽:top操作系統支持多任務并不是計算機同時做很多事情,而是快速的輪換著執行這些任務。linux安排不同的程序等待使用CPU。進程的工作方式:當系統啟動的時候,內核先把自己的程序初始化為進程,然后運行一個init的程序&…

stl vector 函數_vector :: back()函數以及C ++ STL中的示例

stl vector 函數C vector :: back()函數 (C vector::back() function) vector::back() is a library function of "vector" header, it is used to access the last element from the vector, it returns a reference to the last element of the vector. vector ::…

linux udp 端口 抓包,tcpdump之UDP抓包

摘要使用tcpdump抓UDP包,過濾過濾IP和port,并且自動拆分片段。安裝tcpdumpyum install -y tcpdump使用方法tcpdump -i bond0 udp port xxxx and host xxx.x.xx.xxx -s0 -G 600 -w %Y_%m%d_%H%M_%S.pcap參數說明-i 指定監聽的網卡udp 監聽UDP協議port 指定…

Vue版本過渡變化

到了2.0以后&#xff0c;有哪些變化&#xff1a; 在每個組件模板&#xff0c;不在支持片段代碼之前: <template id”aaa”><h3>我是組件</h3><strong>我是加粗標簽</strong></template> 現在: 必須有根元素&#xff0c;包裹住所有的代碼 …

NABARD的完整形式是什么?

NABARD&#xff1a;國家農業和農村發展銀行 (NABARD: National Bank for Agriculture and Rural Development) NABARD is an abbreviation of National Bank for Agriculture and Rural Development. NABARD是國家農業和農村發展銀行的縮寫 。 On 12 July 1982, it was establ…

基于opencv+Dlib的面部合成(Face Morph)

引自&#xff1a;http://blog.csdn.net/wangxing233/article/details/51549880 零、前言 前段時間看到文章【1】和【2】&#xff0c;大概了解了面部合成的基本原理。這兩天空下來了&#xff0c;于是參考【3】自己實現了下。雖然【1】和【2】已經講的很清楚了&#xff0c;但是有…

大腦應對危機的模式_危機的完整形式是什么?

大腦應對危機的模式危機&#xff1a;印度信用評級信息服務有限公司 (CRISIL: Credit Rating Information Services of India Limited) CRISIL is an abbreviation of Credit Rating Information Services of India Limited. It is an international analytic company which off…

linux網絡延遲命令,2. Linux使用ping命令查看網絡延遲

ping命令持續發送少量互聯網流量到遠程地址并報告收到回應的總時間。如果流量因為網絡故障或者錯誤配置而被丟棄&#xff0c;它也會報告。ping命令是最基本和初級的診斷網絡問題的工具之一。ping常被用來測試網絡延遲&#xff0c;但是有時ping的延遲并不是網絡引起的&#xff0…

一、簡單工廠模式

# public class Operation //基類{private double _numberA 0;private double _numberB 0;public double NumberA{get{ return _numberA; }set{_numberA value;}}public double NumberB{get{ return _numberB; }set{_numberB value;}}public virtual double GetResult(){d…

軟件生命周期模型及其類型

A life cycle model is also known as a process model. As the name suggests, the software life cycle model (or the software process model) gives us a pictorial representation of the entire software development process. 生命周期模型也稱為過程模型 。 顧名思義&…

linux查看磁盤io帶寬,[Linux] 磁盤IO性能查看和優化以及iostat命令

iostat命令:%user&#xff1a;CPU處在用戶模式下的時間百分比。%nice&#xff1a;CPU處在帶NICE值的用戶模式下的時間百分比。%system&#xff1a;CPU處在系統模式下的時間百分比。%iowait&#xff1a;CPU等待輸入輸出完成時間的百分比。%steal&#xff1a;管理程序維護另一個虛…

Jsoup 數據修改

2019獨角獸企業重金招聘Python工程師標準>>> 1 設置屬性的值 在解析一個Document之后可能想修改其中的某些屬性值&#xff0c;然后再保存到磁盤或都輸出到前臺頁面。 可以使用屬性設置方法 Element.attr(String key, String value), 和 Elements.attr(String key, S…

軟件靜態架構 軟件組件圖_組件圖| 軟件工程

軟件靜態架構 軟件組件圖什么是組件圖&#xff1f; (What is Component Diagram?) A Component Diagram breaks down the real system under development into different heights of working. Every component is reactive for the main aim in the entire system and only re…

如何卸載非linux系統分區,如何卸載Linux系統分區?卸載Linux系統分區的方法-站長資訊中心...

系統為windows xp sp2和redhat as 5雙系統&#xff0c;其中linux系統后安裝的在D盤&#xff0c;華彩軟件站www.huacolor.com小編今天發現硬盤不夠用了&#xff0c;想干掉linux分區&#xff0c;在虛擬機中用linux。就在windows的磁盤管理(命令為:diskmgmt)下刪除linux分區&#…

順序結構復習

復習一些易錯知識點還有習題 目錄 可能不熟悉的知識點 邏輯表達式的求解 if,else的配隊 條件運算符 運算符優先級的問題 switch的使用 goto和if構成的循環 例題講解 1 2 3 4 ?編輯 5 ?編輯 6賦值 ?編輯 7 可能不熟悉的知識點 邏輯表達式的求解 如果…

模板模式(部分方法延遲到子類實現)

項目中&#xff0c;用到了抽象類作為父類&#xff0c;有部分實現。 提供了了模板方法作為子類公共方法&#xff0c;模板方法中調用了抽象類的抽象方法和部分非抽象方法。 執行代碼時&#xff0c;發現模板方法調用了抽象類的抽象方法&#xff0c;當時比較好奇&#xff0c;后來發…

ruby 集合 分組_在Ruby中找到兩個集合之間的區別

ruby 集合 分組Finding differences simply means that finding elements that are uncommon between two sets as well as are only present in the first set. We can find this, with the help of a – operator. You can also consider the objective as to find the uniqu…

怎樣在linux卸載java,卸載linux自帶java,linux自帶java

卸載linux自帶java&#xff0c;linux自帶java第一步&#xff1a;rpm查詢java安裝包名稱[rootlocalhost java]# rpm -qa | grep javajava-1.7.0-openjdk-headless-1.7.0.51-2.4.5.5.el7.x86_64tzdata-java-2014b-1.el7.noarchpython-javapackages-3.4.1-5.el7.noarchjava-1.7.0-…