跨网段远程调试vs_使用 VS 2019 跨平台编写和调试 Linux C/C++程序

Linux下环境配置

Ubuntu16.04下安装环境和SSH

g++用来编译,gdb gdbserver用来调试,openssh-server负责远程登陆

sudo apt-get install openssh-server g++ gdb gdbserver

修改ssh登录的配置,即/etc/ssh/sshd_config文件,修改为允许root登录,可以执行命令(如果只用普通用户登陆可以不用修改)

sudo vim /etc/ssh/sshd_config

注意:这里的sudo前缀不可少,否则接下来的修改无法保存。进入vim编辑,用方向键向下滚动找到PermitRootLogin这项,改为 PermitRootLogin yes

889e9b1d93788afe74e8b53c75156f18.png

重启ssh服务来让修改生效

sudo service ssh restart

另外要注意如果是虚拟机Linux,要设置网络为桥接模式以确保Linux拥有一个独立的IP地址,这是远程登陆不可少的。

如果不会请参照一下其他关于虚拟机网络设置的文章。


VS2019的安装选项要选中Linux平台

8ed0715aa24ae210c9a765f56e16a6f4.png

在新建项目中选中控制台应用

38464d4493d67298ea6381642b646b88.png

创建完成后自动生成如下

bdee455c75794e6c4e25610d973e4bc9.png

在工具-选项-跨平台中添加远程Linux

7d1f97be650588bbcf09c59c7203e973.png

点击添加按钮后

bf6f10cb4b72e6f50b0449add9ee4155.png

主机名输入要登陆的Linux IP,再输入用户名和密码

32bf352185621b4e43f4b6d1894270a7.png

等待文件同步后,添加成功。

787011bdcaff5f0dd65f4cc27de836fb.png

此时运行按钮上已经有我们所登陆的IP地址

d0b0f357417584c87403ce57d4dd2563.png

在生成的代码中添加一句getchar()来方便观察控制台输出信息

#include <cstdio>

int main()
{
    printf("hello from ConsoleApplication1!n");
    getchar();
    return 0;
}

点击运行

852eb53451ccb64d6f6eebce8de1bc0c.png

控制台窗口已经打印输出信息,如果没加阻塞语句(getchar),程序执行结束窗口一闪而过,就看不到程序实时的调试打印信息。

不加阻塞的话也可以在 调试->Linux控制台 重新打开。

如果要开发的是库文件文件 可以在项目->属性中修改配置类型

7db43906120f222bbca1102041ac9901.png

链接库文件

在实际开发中可能会需要调用各种库文件,以pthread为例

在 项目->(项目名)属性->链接器->输入->库依赖项中添加

bc81c2cd8e9cbd19eece5e999175b7f0.png

直接输入库名,如果有多个库以分号 ”;“ 分割。

c5bbfe0fe3b84fb3e35728f28bcecdba.png
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于第一个问题,我可以为您解答Java UDP网段广播与接收的问题。 首先,UDP是一种无连接的传输协议,它不像TCP那样建立连接,而是直接将数据包发送出去。因此,UDP广播可以实现网段的传输。 下面是一个Java UDP广播和接收的示例代码: 广播端: ```java import java.net.*; public class UDPBroadcaster { public static void main(String[] args) throws Exception { DatagramSocket socket = new DatagramSocket(); socket.setBroadcast(true); String message = "Hello, World!"; DatagramPacket packet = new DatagramPacket(message.getBytes(), message.length(), InetAddress.getByName("255.255.255.255"), 8888); socket.send(packet); socket.close(); } } ``` 接收端: ```java import java.net.*; public class UDPReceiver { public static void main(String[] args) throws Exception { DatagramSocket socket = new DatagramSocket(8888); byte[] buffer = new byte[1024]; DatagramPacket packet = new DatagramPacket(buffer, buffer.length); socket.receive(packet); String message = new String(packet.getData(), 0, packet.getLength()); System.out.println("Received message: " + message); socket.close(); } } ``` 在广播端,我们创建了一个DatagramSocket,并将其设置为广播模式。然后,我们创建一个DatagramPacket,并将其发送到广播地址(255.255.255.255)的端口8888。在接收端,我们同样创建了一个DatagramSocket,并指定端口号为8888。当接收到数据包时,我们可以从DatagramPacket中获取数据,并将其转换为字符串。 接下来,我为您解答第二个问题。如果您想在Docker容器之间实现主机通信,您可以使用Docker网络。Docker网络是一种虚拟网络,它允许Docker容器在同一主机或不同主机之间进行通信。 下面是一个使用Docker网络进行主机通信的示例: 假设我们有两台主机,分别为Host1和Host2。我们在Host1上创建一个名为mynetwork的Docker网络,并在该网络中启动一个名为container1的容器: ``` docker network create mynetwork docker run --name container1 --network mynetwork -d busybox sleep 3600 ``` 然后,在Host2上也创建一个名为mynetwork的Docker网络,并在该网络中启动一个名为container2的容器: ``` docker network create mynetwork docker run --name container2 --network mynetwork -d busybox sleep 3600 ``` 现在,我们可以在container1中ping container2: ``` docker exec container1 ping container2 ``` 在这个示例中,我们使用Docker网络实现了在两台主机之间的容器通信。您可以使用类似的方法在其他应用程序中实现主机通信。 希望以上解答对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值