1. 使用VS2019远程开发Linux C/C++程序
所谓工欲善其事必先利其器,开发一个项目之前,我们要选择好合适的开发工具以及开发环境。
1.1 Linux C/C++程序常见的开发方式
-
在Linux系统上,使用 gcc、g++、gdb、make工具开发Linux C/C++程序;
-
在VM虚拟机上,安装Ubuntu桌面版,使用vsCode开发Linux C/C++程序;
-
在windows上使用vs2019远程跨平台开发Linux C/C++程序。
1.2 vs2019的跨平台开发功能介绍
vs2019支持跨平台开发功能,也就是说,你可以在你的Windows系统上使用vs2019通过SSH服务连接到另一台Linux主机上开发程序,这台Linux主机可以是嵌入式设备,可以是虚拟机VM中安装的Linux系统,也可以是你购买的云Linux服务器。所以要想使用vs2019进行跨平台开发,第一步要确保Windows系统可以ping通远程的Linux系统,并且Linux系统上安装了SSH服务。
在这之后我们就可以使用vs2019编辑代码,进行跨平台编译,并且可以利用vs2019强大的调试功能进行代码调试(这也是我使用vs2019作为开发工具的重点)。
2. 使用步骤
2.1 下载、安装和设置vs2019Linux跨平台开发
-
vs2019安装,在 Windows 搜索框中键入“visual studio installer”:
-
双击运行,选择“修改”,然后单击“工作负荷” 选项卡。滚到最下面,“其他工具集”,勾选“使用 C++ 的 Linux 开发”。
-
在最右侧,可选项中选择适用于Linux的CMake工具以及IntelliCode选项,前者是编译项目,后者是微软的智能代码提示功能。第三个选项应该是用于开发stm32单片机用的,我这里没有选择。点击安装即可。
3. 远程Linux环境安装
这里以我的腾讯云服务器举例,我使用的Linux发行版是Ubuntu Server 20.04 LTS 64bit,你也可以使用Debian、Centos等发行版。 vs2019中的 Linux 项目要求在远程 Linux 系统上安装以下依赖项:
-
openssh ,用于vs进行远程连接,安装命令:
sudo apt-get install openssh-server
-
gcc、g++、gdb 用于编译调试你的c、c++代码,安装命令:
sudo apt-get install gcc g++ gdb
-
网络IP,建议写成静态IP,防止重启linux系统后IP会变,那样vs的远程连接器也需要重新删除再连接,很麻烦,至于怎样修改ubuntu的IP本文不再赘述,网上方法很全,只要能保证主机和虚拟机之间相互能ping通。
4. 连接到目标Linux系统
vs2019 会在远程计算机上生成 C++ Linux 项目。 可以是嵌入式Linux设备、虚拟机VM的Linux,以及云端的Linux系统。 为了生成项目,vs2019 会将源代码复制到远程 Linux 主机上。 然后,代码会根据 vs2019 的设置进行编译。
4.1 在远程系统上设置 SSH 服务器
这个上面已经说明过了。另外,若要让 SSH 服务器在系统启动时自动启动,使用 systemctl 启用它:
sudo systemctl enable ssh
4.2 设置远程连接
-
在 vs2019 中,依次选择菜单栏上的“工具”>“选项” ,打开“选项” 对话框。 然后,依次选择“跨平台”>“连接管理器” ,以打开“连接管理器”对话框。
-
在“连接管理器”对话框中,选择“添加” 按钮,以添加新连接。
-
接下来,会跳转到“连接到远程系统”窗口。
-
输入信息说明:
主机名 :目标设备的名称或 IP 地址 端口 :运行 SSH 服务的端口,通常为 22 用户名 :要进行身份验证的用户 身份验证类型 :同时支持密码和私钥 密码 : 输入的用户名的密码
-
点击连接按钮,尝试连接到远程计算机
如果连接成功,vs2019 便会将 IntelliSense 配置为使用远程标头。
5. 在vs2019中新建Linux项目
-
在 vs2019 中选择“文件 > 新建项目”,或按 Ctrl + Shift + N。“创建新项目”对话框随即显示。
-
在“搜索模板”文本框中输入“Linux”,列出 Linux 项目可用的模板 。
-
选择要创建的项目类型(如“控制台应用程序”),然后选择“下一步” 。 输入“名称”和“位置”,然后选择“创建” 。
-
项目类型说明
Raspberry Pi 项目 :面向 Raspberry Pi 设备的项目,附带让 LED 闪烁的示例代码 控制台应用程序 : 面向任何 Linux 计算机的项目,附带将文本输出到控制台的示例代码 空项目 : 面向任何 Linux 计算机的项目,不带任何示例代码 生成文件项目 : 面向任何 Linux 计算机的项目,使用标准生成文件生成系统生成 CMake 项目 : 面向任何 Linux 计算机的项目,使用 CMake 生成系统生成
6. 在vs2019中配置Linux项目
6.1 常规设置
若要查看配置选项,请选择“项目”>“属性”菜单,或者在“解决方案资源管理器”中右键单击相应项目,选择最下面的属性。
默认情况下,生成可执行文件 (.out)。 若要生成静态或动态库,或使用现有生成文件(makefile文件),在“配置类型”中进行修改。
6.2 远程设置
我们可以指定的远程Linux主机,配置“远程生成计算机”条目,选择我们之前创建的链接之一。
-
“远程生成根目录”指定远程 Linux 计算机上生成项目的根位置。 默认为 ~/projects,我改成了家目录下的vs2019projects目录。
-
“远程部署目录”是在远程 Linux 计算机上生成此项目的位置。 该位置默认为 ( R e m o t e R o o t D i r ) / (RemoteRootDir)/ (RemoteRootDir)/(ProjectName) ,也就是会放在上面设置的根目录下面。
给大家看一下我远程Linux生成的目录(这里你们还不能生成,需要配置介绍生成解决方案后,才会生成目录。)
6.3 复制源
这里基本使用默认配置就可以,简单介绍一下。
在远程系统上进行生成时,Windows上的源文件将复制到 Linux 计算机并在该计算机上进行编译。 默认情况下,vs2019 项目中的所有源文件都将复制到上述设置中设置的位置。 也可以将其他源文件添加到此列表,或完全关复制源文件,这是生成文件项目的默认值。
-
"要复制的源"确定将哪些源文件复制到远程计算机。 默认情况下,@(SourcesToCopyRemotely) 默认为项目中的所有源代码文件。
-
可以打开和关闭“复制源”,以启用和禁用将源文件复制到远程计算机操作。
-
通过“要复制的其他源”,可添加将复制到远程系统的其他源文件。
-
注意"远程复制源方法",如果选择了rsync,那么远程Linux计算机上一定要安装rsync。
7. 远程系统上头文件的 IntelliSense
在连接管理器中添加新连接时,vs2019 会自动为远程系统上的编译器检测包含目录。 随后 vs2019 压缩这些文件,并将其复制到本地 Windows 计算机上的目录中。 此后,每当在 Visual Studio 项目中使用该连接时,都会使用这些目录中的头文件来提供 IntelliSense。
-
此功能的前提是 Linux 计算机中安装了 zip。
若要管理标头缓存,点击“工具”>“选项”,依次选择“跨平台”>“连接管理器”>“远程标头 IntelliSense 管理器”。 若要在更改 Linux 计算机后更新标头缓存,选择远程连接IP地址,然后选择“更新”。 选择“删除”,来删除标头但不会删除连接本身。 选择“浏览”,打开“文件资源管理器”中的本地目录 。 将此文件夹视为只读文件夹。
7.1 目标平台
目标平台是指可执行程序将在此之上运行的操作系统 。 可以生成多个平台的项目。 C++ 项目的可用目标平台取决于各种项目;包括但不限于 Win32、x64、ARM、Android 和 iOS。 Win32 意味着 32 位的 Windows,而 x64 意味着 64 位的 Windows 。选择项目属性->配置管理器,可以选择debug版或是release版,以及选择程序所运行的平台,这里我选择的是debug,x64。此处ARM是指ARM架构32位cpu;ARM64是指ARM架构64位cpu;x64是指Intel64位架构cpu;x86是指Intel32位架构cpu。
7.2 常规属性 Linux C++
(如果初次配置,使用默认配置即可,有特定需求可以进行设置)
-
输出目录 : 指定输出文件目录的相对路径。 它可包括环境变量。
-
中间目录 :指定中间文件目录的相对路径。 它可包括环境变量。
-
目标名称 :指定此项目生成的文件名称。
-
目标扩展名 :指定此项目生成的文件名称(例如 .a .so .out)。
-
清除时要删除的扩展名 :分号分隔的通配符规范,指定在清除或重新生成时要删除中间目录中的哪些文件。
-
生成日志文件 :指定启用生成日志时要写入的生成日志文件。
-
平台工具集 :指定用于生成当前配置的工具集。 如果未设置,则使用默认工具集。
-
远程生成计算机 :用于远程生成、部署和调试的Linux计算机。
-
远程根目录 :指定远程Linux计算机上目录的路径。
-
配置类型 :指定此配置生成的输出类型,如:动态库 (.so)、静态库 (.a)、应用程序 (.out) 和makefile文件。
-
STL 的使用 :指定要用于此配置的 C++ 标准库,如:共享 GNU 标准 C++ 库或静态 GNU 标准 C++ 库 (-static)。
7.3 使用附加库
例如我们需要使用pthread库,那么就在"库依赖项"一栏输入lpthread。就相当于gcc设置"-l[库名称]"选项,用于指定链接时所需要的动态库或静态库。
9. 在vs2019中部署、运行和调试Linux项目
配置完成前面的工作之后,我们就可以开始运行和调试项目。是不是还有点小激动呢。下面的操作会在远程Linux系统上编译、执行和调试代码。其实也可以理解为交叉编译。 与 Linux 项目交互并对其进行调试方法有若干种。
-
使用 Visual Studio 传统功能(例如断点、监视窗口和悬停在变量上)进行调试。 使用这些方法,可以像平常调试其他项目类型那样进行调试。不要太方便噢,让你的项目进度开发原地起飞!
-
从 Linux 控制台窗口中的目标计算机查看输出。 还可以使用控制台将输入发送到目标计算机。
9.1 调试Linux项目
在“调试”属性页中选择调试模式。
GDB 用于调试在 Linux 上运行的应用程序。 GDB 可以在两种不同的模式下运行,可从项目“调试”属性页中的“调试模式”选项中进行选择:
-
在 gdbserver 模式下,GDB 在本地运行,连接到在远程系统上的 gdbserver。
-
在 gdb 模式下,vs2019 调试程序在远程系统上驱动 GDB 。 建议选择gdb模式。
9.2 使用调试工作栏,选择远程目标。
9.3 在代码的左滚动条槽中单击,设置断点。
设置断点的代码行上出现一个红点。
9.4 按 F5(或者“调试”>“开始调试”)开始调试
开始调试时,应用程序先在远程Linux系统上编译,再启动。 任何编译错误都将显示在“错误列表”窗口中。
如果没有错误,则应用将启动并且调试程序将在断点处暂停。
现在,可通过按命令键(如 F10 或 F11),与处于当前状态的应用程序交互、查看变量以及逐行执行代码。
9.5 如果需要使用 Linux 控制台与应用进行交互,请选择“调试”>“Linux 控制台”。
此控制台将显示来自远程Linux计算机的全部控制台输出并接收输入,并将其发送到远程Linux计算机。
-
配置其他调试选项
可以使用“其他调试程序命令”条目将特定调试程序选项传递到 GDB。 例如,你可能需要忽略 SIGILL(非法指令)信号。 可以使用 handle 命令实现此目的,方法是将以下命令添加到上图所示的“其他调试程序命令”条目:
handle SIGILL nostop noprint
10. 总结
总的来说,以上的各项配置,在实际开发中都会碰到。大家可以一点点来,遇到了问题再来寻求解决方法。没必要一次性全部配置完成。很多配置也是在工作工程中,慢慢理解的。 在使用vs2019远程开发Linux项目的过程中,得益于vs强大的调试功能,项目的编译调试以及部署都会很方便,但是有一点不太好的,就是如果远程Linux主机的性能不高同时项目又比较大的话,生成项目的时间会比较长。所以博主也在考虑后面在vm虚拟机上使用vsCode利用交叉编译工具开发嵌入式Linux项目。
————————————————
原文链接:https://blog.csdn.net/weixin_43859355/article/details/121098577
标签:项目,vs2019,C++,生成,Linux,远程,调试 From: https://www.cnblogs.com/zhuchunlin/p/17027505.html