从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目标机上。

如果您感觉这篇博客很有用或者您在使用中遇到任何问题,请在下面评论让我们知道。我们也欢迎任何有助于提升的建议。

vs生成linux服务器程序,从Visual Studio到Linux上调试C++代码相关推荐

  1. linux服务器程序开发,怎样搭建一个linux开发服务器

    在开发过程中,必然会出现多人同时工作.协着的情况,在嵌入式开发项目中更为平常,这样可以加快项目周期,为产品上市占得时间先机.目前,使用Linux作为开发产品的操作系统情况越来越多,使用越来越广泛.为了 ...

  2. cmake 检查文件更新_2020年6月:Visual Studio对Linux开发平台的更新

    三项更新 通过使用Visual Studio 2019,你可以在一台远程Linux系统或者WSL(Windows Subsystem for Linux)上进行编译和调试C++工程,另外,你还可以使用 ...

  3. visual studio编译linux,在 Visual Studio 中配置 Linux MSBuild C++ 项目

    在 Visual Studio 中配置 Linux MSBuild C++ 项目Configure a Linux MSBuild C++ project in Visual Studio 10/16 ...

  4. Visual Studio 2017 通过SSH 调试Linux 上.NET Core

    Visual Studio 2017 通过SSH 调试Linux 上.NET Core 应用程序. 本文环境 开发环境:Win10 x64 Visual Studio 2017 部署环境:Ubuntu ...

  5. 7 linux服务器程序规范

    1. Linux服务器程序一般以后台进程形式运行.后台进程又称守护进程(daemon),它没有控制终端,因而不会意外接收到用户输入.父进程通常为init(PID为1的进程) 2. Linux服务器程序 ...

  6. 通过Visual Studio为Linux编写C++代码

    Build 2016大会上Microsoft首次公布的Visual Studio 2015扩展提供了在VS2015中编写C++代码,随后通过Linux/UNIX计算机进行编译和执行的能力.这种想法非常 ...

  7. Linux 服务器程序规范、服务器日志、用户、进程间的关系

    文章目录 服务器程序规范 日志 rsyslogd 守护进程 syslog函数 openlog函数 setlogmask函数 closelog函数 用户 进程间的关系 进程组 会话 系统资源限制 改变工 ...

  8. visual报表服务器项目,为 Visual Studio ALM 创建报表服务器项目

    为 Visual Studio ALM 创建报表服务器项目 06/09/2015 本文内容 通过使用 SQL Server 报表设计器来创建报表可以跟踪团队的进度. 在可以使这些报表基于 Visual ...

  9. 《Linux高性能服务器编程》读书笔记:linux服务器程序规范

    服务器程序规范,需要强化和遵守的,作者给列了4条规范: 1.Linux服务器程序一般以后台进程形式运行,也就是以daemon守护进程的方式,守护进程的父进程通常是init进程(PID进程为1),作者在 ...

最新文章

  1. jinja2的url_for 和数据块
  2. java 工作3年水平_有着4年java工作经验,应该达到什么样的水平?
  3. Web安全学习Week5
  4. JQuery中.css()与.addClass()设置样式的区别
  5. C语言之scanf中的格式
  6. react打包后图片丢失_手写Webpack从0编译Vue/React项目
  7. leveldb - sstable格式
  8. [转载] python改写二分搜索算法_二分搜索算法模板python实现
  9. Matlab图像处理应用举例2
  10. 华为鸿蒙 os 适配机型曝光,华为鸿蒙OS 2.0首批适配机型曝光
  11. 微信红包管理数据库mysql_莫晓东 - 微信红包数据库架构演变
  12. Linux交换分区 swap分区
  13. latex 如何输入 双斜杠 单斜杠
  14. SAS学习(8)——自定义proc means的数据导出
  15. 数字图像处理(1)图像取样,4倍,16倍减采样,matlab实现
  16. Linux背后的大脑-传奇人物Linus
  17. UI设计师如何应对面试 哪些细节问题不可忽视
  18. 基于Python和Selenium的大麦网自动抢票脚本
  19. java+ssm+mysql汽车销售后台管理系统
  20. 山洪灾害监测系统产品详细说明

热门文章

  1. MySQL应用安装_mysql安装和应用
  2. java解析带斜杠的参数_Java Spring MVC应用程序仅接受带有斜杠的POST请求
  3. c3等待加载样式 vue_Vue.js__简易加载等待动画
  4. 博达3956交换机配置手册_网络设备维保浅谈之交换机维保
  5. react取消所有请求_react 组件关闭后怎么消除还在进行中的ajax
  6. pb 怎么判断是 小数_考试90分以上的孩子是怎么学数学的?听听老师怎么说?
  7. mysql 导入 mssql_MySQL(csv,text)导入mssql使用方法
  8. python matplotlib 绘制曲线图,柱状图
  9. innobackupex远程备份脚本
  10. Docker教程介绍