千家信息网

Vscode搭建远程c开发环境的过程是怎样的

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这期内容当中小编将会给大家带来有关Vscode搭建远程c开发环境的过程是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。基础环境目标机:ubuntu20开发机:
千家信息网最后更新 2026年11月02日Vscode搭建远程c开发环境的过程是怎样的

这期内容当中小编将会给大家带来有关Vscode搭建远程c开发环境的过程是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

基础环境

  • 目标机:ubuntu20

  • 开发机:win10、mac 安装

远程开发套件

本机和目标机都需要安装。

参考 vscode 免密登录服务器编辑配置服务器信息,用vscode打开远程电脑的一个目录。

建立c文件

#include #include   #include   //系统函数#include #include  //多线程库 #include "net_control_client.h" ts_tcp_client s_tcp_client;  static int connect_to_server(void){        while(connect(s_tcp_client.socket_fd, (struct sockaddr *) &(s_tcp_client.server_socket_addr),                        sizeof(struct sockaddr)) != 0){                //if connect error reconnect after 5 seconds                perror("connect");                printf("***reconnect after 5s***\n");                sleep(5);                printf("***reconnect...***\n");        }        printf("***connected***\n");#if 1//test message send    sleep(1);        char test_msg[] = "This is from client";        send(s_tcp_client.socket_fd, test_msg ,sizeof(test_msg),0);#endif        return 0;} /* * 接收socket数据函数. * client_fd - 客户端连接的socket。 */static int receive_packet(int client_fd){        unsigned char         buf[TCP_BUFFER_SIZE];        int             recvbytes;        while(1){                /*接收*/                bzero(buf,sizeof(buf));                 recvbytes = recv(client_fd,buf,TCP_BUFFER_SIZE,0);                printf("Receive %d bytes\n",recvbytes);                 if (recvbytes <= 0){//receive error or disconnected                        perror("recv");                        /*reconnect to server*/                        printf("close socket id = %d\n", s_tcp_client.socket_fd);                        close(s_tcp_client.socket_fd);  //关闭通道                        s_tcp_client.socket_fd = socket(AF_INET, SOCK_STREAM, 0);                        if (s_tcp_client.socket_fd == -1){                printf("###socket init error###\n");                                perror("socket");                                return -1;                        }                        printf("new socket id = %d\n", s_tcp_client.socket_fd);                        if (connect_to_server() != 0){                                printf("###connect_to_server error###\n");                                return -1;                        }                }else{//receive success#if 1//test                        int i;                        printf("***GET:\n");                        for (i = 0; i < recvbytes; i++){                                printf("0xX  %c\n", *(buf+i), *(buf+i));                        }#endif                }        }        return 0;}/*tcp clinet send thread*/int tcp_send_start(void){    char buf[100];    uint32_t i = 0;    while(1)    {        sleep(5);        memset(buf,0,sizeof(buf));        sprintf(buf,"***send data:hello world : %d\n",i);        i++;        printf("%s",buf);        send(s_tcp_client.socket_fd, buf ,strlen(buf),0);    }}/*tcp clinet running function*/int tcp_client_start(void){    pthread_t  tcp_send_thread_id;//返回的线程值        printf("***connect to %s:%d....***\n", s_tcp_client.server_ip,s_tcp_client.server_port);        /*connect to server*/        if (connect_to_server() != 0){                printf("###connect_to_server error###\n");                return -1;        }        //create thread for TCP send        pthread_create(&tcp_send_thread_id, NULL, (void *)tcp_send_start, NULL);        receive_packet(s_tcp_client.socket_fd);        return 0;} /* * tcp_client initialize function * port_num -  TCP server port number * server_ip - TCP server ip * */int tcp_client_init(unsigned short port_num, char *server_ip){        int res;        struct in_addr test_addr;        /*initialize variable*/        if (port_num > 0){                s_tcp_client.server_port = port_num;        }else{                printf("###invalid tcp server port:%d###\n", port_num);                return -1;        }         if (server_ip == NULL){                printf("###server_ip cannot be NULL###\n");                return -1;        }else{                strcpy(s_tcp_client.server_ip, server_ip);//record ip        }    printf("server ip is: %s\r\n",s_tcp_client.server_ip);         /*建立socket描述符*/        if ((s_tcp_client.socket_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1){                perror("socket");                return -1;        }        printf("socket id = %d\n", s_tcp_client.socket_fd);         /*         * 填充服务器sockaddr结构         */        bzero(&(s_tcp_client.server_socket_addr), sizeof(struct sockaddr_in));    //memset        s_tcp_client.server_socket_addr.sin_family                 = AF_INET;        inet_pton(AF_INET, s_tcp_client.server_ip, &(s_tcp_client.server_socket_addr.sin_addr.s_addr));   //把ip地址转化为用于网络传输的二进制数值        s_tcp_client.server_socket_addr.sin_port                                = htons(s_tcp_client.server_port); //将主机字节顺序转为网络字节顺序        bzero(&(s_tcp_client.server_socket_addr.sin_zero), 8);         return 0;} int main(int argc, char *argv[]){        int i = 0;        int res;        pthread_t  tcp_thread_id;//返回的线程值        char tcp_server_port[256];        char tcp_server_ip[256];    printf("enter main\r\n");        if (argc >= 2){                if (strcmp(argv[1],"-v") == 0){                        printf("net_control_client v1.0\n");                        return 0;                }else if (strcmp(argv[1],"-h") == 0){                        printf("-v for version\n");                        printf("-h for help\n");                        printf("tcp_connect  \n");                        return 0;                }else if (strcmp(argv[1], "tcp_connect") == 0){                        /*tcp demo*/                        strcpy(tcp_server_ip, argv[2]);                        strcpy(tcp_server_port, argv[3]);                         /*initialize functions*/                        res = tcp_client_init((unsigned short)atoi(tcp_server_port), tcp_server_ip);//set tcp clinet setting                        if (res == -1){                                printf("###tcp_server_init error###\n");                                return -1;                        }                         //create thread for TCP communication                        pthread_create(&tcp_thread_id, NULL, (void *)tcp_client_start, NULL);                }else{                        printf("Unknown argument %s\n",argv[1]);                        return -1;                }        }    else{        printf("please input ip and port\r\n");        exit(0);    }        while(1){                if (i < 100){                        i++;                }else{                        i = 0;                }                sleep(1);        }        exit(0);}

.h文件

#ifndef NET_CONTROL_CLINET_H_#define NET_CONTROL_CLINET_H_ #include  #define TCP_BUFFER_SIZE    1024//max buff of receive buffer for tcp typedef struct{//tcp client class                unsigned short   server_port;                char                               server_ip[64];                int                                socket_fd;//socket                struct                             sockaddr_in server_socket_addr;}ts_tcp_client;  #endif /* NET_CONTROL_CLINET_H_ */

配置编译任务

进入 'main.c'文件,然后点击菜单栏 终端->配置默认生成任务,系统会自动建立一个task.json文件,如下

{        "version": "2.0.0",        "tasks": [                {                        "type": "cppbuild",                        "label": "C/C++: gcc 生成活动文件",                        "command": "/usr/bin/gcc",                        "args": [                                "-fdiagnostics-color=always",                                "-g",                                "${file}",                                "-o",                                "${fileDirname}/${fileBasenameNoExtension}",                                "-lpthread"                        ],                        "options": {                                "cwd": "${fileDirname}"                        },                        "problemMatcher": [                                "$gcc"                        ],                        "group": {                                "kind": "build",                                "isDefault": true                        },                        "detail": "编译器: /usr/bin/gcc"                }        ]}

task.json 用来告诉vscode 怎么去编译源文件main.c

  • lablel 定义该任务的名称,后续调试会根据该名称调用本任务,这里名为C/C++: gcc 生成活动文

  • args :编译时的参数,比如假设程序依赖 pthread库,,那么在这里指定,这里和手动在命令行输入 gcc xxx 命令相同

  • cwd:指定当前运行路径 配置调试程序

仍然保证 编辑区打开的是main.c文件,然后点击菜单栏 运行->添加配置,系统会自动建立一个launch.json文件,如下

{    // 使用 IntelliSense 了解相关属性。     // 悬停以查看现有属性的描述。    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387    "version": "0.2.0",    "configurations": [        {            "name": "gcc - 生成和调试活动文件",            "type": "cppdbg",            "request": "launch",            "program": "${fileDirname}/${fileBasenameNoExtension}",            "args": ["tcp_connect","192.168.1.201","8888"],//调试时传递给程序的命令行参数             "stopAtEntry": true,//是否停留在main函数            "cwd": "${fileDirname}",//调试程序时的工作目录             "environment": [],//环境变量             "externalConsole": false,//调试时是否显示控制台窗口             "MIMode": "gdb",//指定连接的调试器,可以为gdb或lldb             "setupCommands": [                {                    "description": "为 gdb 启用整齐打印",                    "text": "-enable-pretty-printing",                    "ignoreFailures": true                }            ],            "preLaunchTask": "C/C++: gcc 生成活动文件",//调试开始前执行的任务,一般为编译程序 对应 tasks.json中的label            "miDebuggerPath": "/usr/bin/gdb"        }    ]}
  • 默认内容和我贴出来的略有不同,我增加了一些参数

  • launch.json 文件用来告诉vscode怎么调用gdb去调试,指定了一些参数,

  • preLaunchTask:调试开始前执行的任务,一般为编译程序 对应 tasks.json中的label

  • stopAtEntry": true,//是否停留在main函数

  • "args": ["tcp_connect","192.168.1.201","8888"],//调试时传递给程序的命令行参数 比如我调试这个函数需要在命令行输入,也就是标准输入 输入一些参数,那么填在这里

开始编译

仍然保证 编辑区打开的是main.c文件,

点击菜单栏终端->运行生成任务 或者 ctrl+shift+b

开始调试

打开 vscode 侧边栏 选择调试标签

观察 绿色三角箭头 右侧的名称,与launch.json中name`一致。

点击绿色箭头,或者按F5 进入调试。

注意

在生成配置,或者调试时,一定要保证当前编辑器打开的是待调试的c文件,而不是新建的launch.json或者tasks.json

上述就是小编为大家分享的Vscode搭建远程c开发环境的过程是怎样的了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

文件 任务 程序 生成 编译 参数 配置 函数 命令 环境 开发 活动 输入 内容 名称 服务器 系统 菜单 保证 服务 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州大一互联网络科技有限公司 湖南永感互联网科技有限公司 互联网科技行业发展 互联网科技公司的优势 重庆互联网络科技 南京欣网互联网科技 善班互联网科技有限公司 有木互联网科技 注册互联网科技公司经营范围大全 开一家科技互联网公司需要多少钱 互联网金融科技展 洛阳共同富裕互联网科技有限公司 互联网科技创新的路径 保险科技服务互联网营销体系 科技互联网的核心竞争力 智帮互联网科技公司最近动向 梅州GM互联网络科技有限公司 福仕德教育科技互联网 众联互联网络科技 恒生科技互联网指数十大成分股 深圳互联网络科技有限公司 互联网科技股有哪些 华中科技有哪些互联网大佬 深圳艾果互联网通讯科技 高科技互联网发展前景如何 郑州欣桑互联网科技有限公司 科技互联网经济论坛 第三届互联网大会安防黑科技 现代互联网科技公司 上海互联网科技园景观
0