VisualStudio远程编译调试linux_c++程序(二)

news2024/12/23 10:35:17

前章讲述了gdb相关,这章主要讲述用VisualStudio调试编译linux_c++程序

1:环境
win10
VisualStudio 2022 Community
ubuntu22.04

2:安装
1>vs安装时,勾选 使用c++进行linux 和嵌入式开发 (这里以vs2022为例)
OR VS安装好了, 选择工具->获取工具和功能->c++进行linux 和嵌入式开发->修改
2>Linux 机子(虚拟机) 设置好固定IP(为了以后方便) DNS 114.114.114.114 阿里223.5.5.5
linux 准备好 gcc/g++ gdb gdbserver
查看是否安装了ssh
whereis ssh
ps -e|grep ssh #查看是否在运行
3>没有自行安装
ssh_config为客户端配置文件
sshd_config为服务器端配置文件 需要是这个
没有 安装 没有/etc/ssh/sshd_config 也直接安装
sudo apt-get update
sudo apt-get install openssh-server
4>SSH开启密码登录。
<1>vim /etc/ssh/sshd_config,修改以下信息。
PasswordAuthentication yes
<2>重启SSH服务
systemctl restart sshd 或 service sshd restart

在这里插入图片描述

在这里插入图片描述
可能遇到的问题
1:Failed to start sshd.service: Unit sshd.service not found.
解决方案:
添加ssh.service
systemctl enable ssh.service
2:ptrace: Operation not permitted.权限错误
com.jetbrains.cidr.execution.debugger.backend.gdb.GDBDriver$GDBCommandException: ptrace: Operation not permitted.
解决:
编辑/etc/sysctl.d/10-ptrace.conf这个文件,若没有,创建之。设置(默认是1)
kernel.yama.ptrace_scope = 0
这样下次启动时会生效。

3:vs远程配置
工具->选项->跨平台->连接管理器
增加 ssh连接
主机名 写IP
端口 默认 22 ssh的
用户名 登录账号
密码 密码
在这里插入图片描述

4:demo演示
这里以Jsoncpp为例 download:https://github.com/open-source-parsers
如果没有cmake 就安装 sudo apt-get install cmake 这里安装的 3.22版本
sudo snap install cmake # version 3.30.5, or
sudo apt install cmake # version 3.22.1-1ubuntu1.22.04.2
See ‘snap info cmake’ for additional versions.
在这里插入图片描述

cmake -DCMAKE_BUILD_TYPE=debug -DBUILD_STATIC_LIBS=OFF -DBUILD_SHARED_LIBS=ON -DARCHIVE_INSTALL_DIR=. -DCMAKE_INSTALL_INCLUDEDIR=include -G "Unix Makefiles" ../..

在这里插入图片描述
在这里插入图片描述
只执行了make 没有执行 make install

在这里插入图片描述

code 官方代码 用来测试用

#include "json/json.h"
#include <fstream>
#include <iostream>
#include <stdio.h>
/** \brief Parse from stream, collect comments and capture error info.
 * Example Usage:
 * $g++ readFromStream.cpp -ljsoncpp -std=c++11 -o readFromStream
 * $./readFromStream
 * // comment head
 * {
 *    // comment before
 *    "key" : "value"
 * }    
 * // comment after
 * // comment tail
 */
int main(int argc, char* argv[]) {
    Json::Value root;
    std::ifstream ifs;
    ifs.open(argv[1]);

    Json::CharReaderBuilder builder;
    builder["collectComments"] = true;
    JSONCPP_STRING errs;
    if (!parseFromStream(builder, ifs, &root, &errs)) {
        std::cout << errs << std::endl;
        return EXIT_FAILURE;
    }
    std::cout << root << std::endl;
    return EXIT_SUCCESS;
}

在这里插入图片描述
在这里插入图片描述

1>同步 usr/include /usr/local 目录
在 VC++ 目录 包含目录 /usr/include
工具->选项->跨平台->连接管理器->远程标头IntelliSense管理器->(选中相应IP)浏览OR 更新
这样就同步了 这个解决了头文件问题

2>:同步库文件 无需同步 只需
不认识 必须要写 /home/ubuntu/ 不然更新不下来
包含目录 /usr/include;/home/ubuntu/code/c/jsoncpp-master/include
包含库目录 /usr/lib/x86_64-linux-gnu;/usr/lib;/home/ubuntu/code/c/jsoncpp-master/build/debug/lib

静态库
在连接器 附加依赖项 /home/ubuntu18/code/c_code/jsoncpp-master/build/lib/libjsoncpp.a

1> 在 VC++ 目录-> 库目录 /usr/lib/x86_64-linux-gnu;/usr/lib 这两个不知道哪个才有用可以都包含了
2> 链接器->库依赖项 ssl;crypto

编译结果如下
在这里插入图片描述

远程调试
没有执行make install,所以需要手动增加下 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/ubuntu/code/c/jsoncpp-master/build/debug/lib
在这里插入图片描述

调试 代码修改下

#include "json/json.h"
#include <fstream>
#include <iostream>
#include <stdio.h>
int main(int argc, char* argv[]) {
    Json::Value root;
    std::ifstream ifs;
    ifs.open(argv[1]);

    Json::CharReaderBuilder builder;
    builder["collectComments"] = true;
    JSONCPP_STRING errs;
    if (!parseFromStream(builder, ifs, &root, &errs)) {
        std::cout << errs << std::endl;
        return EXIT_FAILURE;
    }
    std::cout << root << std::endl;
    std::cout <<"name"<< root["name"] << std::endl;
    return EXIT_SUCCESS;
}

在这里插入图片描述

额外话题:环境变量
环境变量设置 参考 https://blog.csdn.net/hfhhgfv/article/details/83926923
/etc/profile:在登录时,操作系统定制用户环境时使用的第一个文件,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。并从/etc/profile.d目录的配置文件中搜集shell的设置。
/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。
~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
~/.profile:在登录时用到的第三个文件。profile文件,每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件

~/.bashrc 或者 ~/.bash_profile 中加入 export 语句,前者在每次登陆和每次打开 shell 都读取一次,后者只在登陆时读取一次

对所有用户有效修改/etc/profile
对个人有效则修改~/.bashrc

PTAH  export PATH =$PATH:$HOME/bin  
GCC 查找头文件的路径   C_INCLUDE_PATH=$C_INCLUDE_PATH:/MyInclude   export C_INCLUDE_PATH 
G++ 查找头文件的路径   CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/MyInclude  export CPLUS_INCLUDE_PATH  
查找动态链接库的路径: LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/MyLib   export LD_LIBRARY_PATH  
查找静态库的路径: LIBRARY_PATH=$LIBRARY_PATH:/MyStaticLib  export LIBRARY_PATH 

gcc/G++命令中手动设置搜索路径

添加头文件搜索路径  gcc test.c -I /home/my/include -o test   大写I  到目录这层
添加动态库搜索路径 gcc test.c -L /home/my/lib -lmylib -o test   大写L  到目录这层
添加静态库搜索路径 gcc test.c -L /home/my/lib -static -ltest -o test   大写L  到目录这层

5:如果觉得有用,麻烦点个赞,加个收藏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2231620.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【002】基于SpringBoot+thymeleaf实现的蓝天幼儿园管理系统

基于SpringBootthymeleaf实现的蓝天幼儿园管理系统 文章目录 系统说明技术选型成果展示账号地址及其他说明源码获取 系统说明 基于SpringBootthymeleaf实现的蓝天幼儿园管理系统是为幼儿园提供的一套管理平台&#xff0c;可以提高幼儿园信息管理的准确性&#xff0c;系统将信息…

【AIGC】从CoT到BoT:AGI推理能力提升24%的技术变革如何驱动ChatGPT未来发展

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;迈向AGI的新跨越&#x1f4af;BoT与CoT的技术对比技术原理差异推理性能提升应用范围和通用性从错误中学习的能力总结 &#x1f4af;BoT的工作流程和机制初始化过程生成推…

无人机拦截捕获/直接摧毁算法详解!

一、无人机拦截捕获算法 网捕技术 原理&#xff1a;抛撒特殊设计的网具&#xff0c;捕获并固定无人机。 特点&#xff1a; 适用于小型无人机。 对无人机的损害较小&#xff0c;基本不影响其后续使用。 捕获成功率较高&#xff0c;且成本相对较低。 应用实例&#xff1a;…

解码层跑几次取决于输出词汇多少;10个单词,在解码层跑几次transformer

目录 解码层跑几次取决于输出词汇多少 10个单词,在解码层跑几次transformer 解码层跑几次取决于输出词汇多少 10个单词,在解码层跑几次transformer 取决于具体任务和输出要求 在自然语言处理任务中,Transformer 架构的解码器(Decoder)运行次数与你想要生成的输出长度有关…

算法【Java】—— 记忆化搜索

记忆化搜索 在前面我们已经学习了递归回溯等知识&#xff0c;什么是记忆化搜索&#xff0c;其实就是带着备忘录的递归&#xff0c;我们知道在递归过程中如果如果出现大量的重复的相同的子问题的时候&#xff0c;我们可能进行了多次递归&#xff0c;但是这些递归其实可以只用进…

优化EDM邮件营销,送达率与用户体验双赢

EDM邮件营销需选对平台&#xff0c;优化邮件列表&#xff0c;确保内容优质&#xff0c;进行邮件测试&#xff0c;关注用户反馈调整频率&#xff0c;以保高送达率&#xff0c;提升营销效果。 1. 了解电子邮件送达率的重要性 在开始优化邮件送达率之前&#xff0c;首先需要理解电…

Metasploit渗透测试之在云服务器中使用MSF

概述 随着云计算的发展&#xff0c;对基于云的应用程序、服务和基础设施的测试也在不断增加。在对云部署进行渗透测试时&#xff0c;最大的问题之一是共享所有权。过去&#xff0c;在进行渗透测试时&#xff0c;企业会拥有网络上的所有组件&#xff0c;我们可以对它们进行全部…

Qt桌面应用开发 第一天

目录 1.默认代码解析 1.1main.h解析 1.2myWidget.h解析 1.3FirstProject.pro解析&#xff08;FirstProject为创建的Qt项目名&#xff09; 2.命名规范与快捷键 3.按钮控件及窗口设置 3.1按钮控件QPushButton类 3.2窗口常用设计 4.Qt中的对象树 5.Qt中的坐标系 Qt是一个…

简记Vue3(三)—— ref、props、生命周期、hooks

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

Mybatis查询数据库,返回List集合,集合元素也是List。

#有时间需求会要求&#xff1a;查询全校的学生数据&#xff0c;且学生数据按班级划分。那么就需要List<List<user>>类型的数据。 SQL语句 SELECT JSON_ARRAYAGG(JSON_OBJECT(name , name ,BJMC, BJMC ,BJBH,BJBH)) as dev_user FROM dev_user WHERE project_id …

Freertos学习日志(1)-基础知识

目录 1.什么是Freertos&#xff1f; 2.为什么要学习RTOS&#xff1f; 3.Freertos多任务处理的原理 1.什么是Freertos&#xff1f; RTOS&#xff0c;即&#xff08;Real Time Operating System 实时操作系统&#xff09;&#xff0c;是一种体积小巧、确定性强的计算机操作系统…

批量提取当前文件夹内的文件名

在需要提取的文件夹内新建一个txt文件&#xff0c;输入&#xff1a; dir ./b>name.txt 然后将该txt文件的扩展名改为.bat 如图 双击即可提取当前文件夹文件名&#xff0c;并保存到name.txt内

小林渗透入门:burpsuite+proxifier抓取小程序流量

目录 前提&#xff1a; 代理&#xff1a; proxifier&#xff1a; 步骤&#xff1a; bp证书安装 bp设置代理端口&#xff1a; proxifier设置规则&#xff1a; proxifier应用规则&#xff1a; 结果&#xff1a; 前提&#xff1a; 在介绍这两个工具具体实现方法之前&#xff0…

Node.js:session JWT

Node.js&#xff1a;session & JWT sessioncookiesessionexpress-session JWTexpress-jwt & jsonwebtoken session HTTP协议是无状态的&#xff0c;客户端的每次HTTP请求都是独立的&#xff0c;多个请求之间没有直接的关系&#xff0c;服务器不会保留每次HTTP请求的状…

后台管理系统的通用权限解决方案(七)SpringBoot整合SpringEvent实现操作日志记录(基于注解和切面实现)

1 Spring Event框架 除了记录程序运行日志&#xff0c;在实际项目中一般还会记录操作日志&#xff0c;包括操作类型、操作时间、操作员、管理员IP、操作原因等等&#xff08;一般叫审计&#xff09;。 操作日志一般保存在数据库&#xff0c;方便管理员查询。通常的做法在每个…

曹操出行借助 ApsaraMQ for Kafka Serverless 提升效率,成本节省超 20%

本文整理于 2024 年云栖大会主题演讲《云消息队列 ApsaraMQ Serverless 演进》&#xff0c;杭州优行科技有限公司消息中间件负责人王智洋分享 ApsaraMQ for Kafka Serverless 助力曹操出行实现成本优化和效率提升的实践经验。 曹操出行&#xff1a;科技驱动共享出行未来 曹操…

Mysql常用语法一篇文章速成

文章目录 前言前置环境数据库的增删改查查询数据查询所有条件查询多条件查询模糊查询分页查询排序查询分组查询⭐️⭐️关联查询关联分页查询 添加数据insert插入多条记录不指定列名(适用于所有列都有值的情况) 更新数据更新多条记录更新多个列更新不满足条件的记录 删除统计数…

信息安全数学基础(43)理想和商环

理想&#xff08;Ideal&#xff09; 定义&#xff1a; 设R是一个环&#xff0c;I是R的一个非空子集。如果I满足以下条件&#xff0c;则称I为R的一个理想&#xff1a; 对于任意的r1, r2 ∈ I&#xff0c;有r1 - r2 ∈ I&#xff08;加法封闭性&#xff09;。对于任意的r ∈ I&am…

node.js下载、安装、设置国内镜像源(永久)(Windows11)

目录 node-v20.18.0-x64工具下载安装设置国内镜像源&#xff08;永久&#xff09; node-v20.18.0-x64 工具 系统&#xff1a;Windows 11 下载 官网https://nodejs.org/zh-cn/download/package-manager 版本我是跟着老师选的node-v20.18.0-x64如图选择 Windows、x64、v20.18…

《JVM第3课》运行时数据区

无痛快速学习入门JVM&#xff0c;欢迎订阅本免费专栏 运行时数据区结构图如下&#xff1a; 可分为 5 个区域&#xff0c;分别是方法区、堆区、虚拟机栈、本地方法栈、程序计数器。这里大概介绍一下各个模块的作用&#xff0c;会在后面的文章展开讲。 类加载子系统会把类信息…