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.mzph.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-…