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

前章讲述了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.mzph.cn/bicheng/59236.shtml

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

相关文章

深入理解高频电路中的S参数

高频电路的设计与分析在现代电子工程中占据了重要地位,尤其是在射频和微波领域。随着技术的发展,网络分析法逐渐成为研究高频电路的重要工具,而S参数则是其中的核心概念之一。 一、S参数的基本概念 S参数,即散射参数,是用来描述电路中信号的入射、反射和传输特性的参数。…

Netty 常见组件介绍

Netty 常见组件介绍 上篇文章Netty入门程序echo 基本包含了Netty常见的组件&#xff0c;本文分别介绍各个组件 Bootstrap or ServerBootstrapEventLoopEventLoopGroupChannelPipelineChannelFuture or ChannelFutureChannelInitializerChannelHandler Bootstrap vs ServerBo…

el-talble selection行 初始默认勾选

导言 el-talble selection 行&#xff08;选择列&#xff09;用于显示复选框&#xff0c;让用户可以选择或取消选择某些表格行&#xff0c;常用于批量操作场景。 刚刚试了下&#xff0c;想加深印象记录一下当学习碎片。参考的是表格多选并根据每行值初始化选中状态&#xff08;…

HTML 块级元素和内联(行内)元素详解

在 HTML 中,元素根据它们在页面中的表现方式分为两类:块级元素 和 内联元素(行内元素)。了解块级元素和内联元素的特性与使用方法,是掌握HTML开发的重要基础。本文将深入探讨这两类元素的特点及其在实际开发中的应用。 文章目录 一、块级元素1.1 块级元素是什么?1.2 块级…

使用Docker构建和部署微服务

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 [TOC] Docker 是一个开源的容器化平台&#xff0c;可以帮助开发者轻松构建、打包和部署应用程序。本文将详细介绍如何使用 Dock…

conda下jupyterlab安装问题以及交互绘图问题记录

安装 1. 直接conda install jupyterlab就好&#xff0c;只要在base环境下安装就行&#xff0c;可以在任意环境下执行jupyter lab启动。 2. 打开jupyter lab后显示Could not determine jupyterlab build status without nodejs&#xff0c;可以执行conda install nodejs安装no…

springboot 基于google 缓存,实现防重复提交

在Spring Boot应用中&#xff0c;可以使用Google Guava缓存来实现防重复提交功能。Guava提供了强大的缓存机制&#xff0c;可以方便地实现对请求的去重处理。。 1. 添加依赖 首先&#xff0c;在你的pom.xml文件中添加Guava的依赖&#xff1a; <dependency><groupId&…

springcloud整合sentinel,限流策略持久化到nacos,详细配置案例

目录 1.组件下载和启动 &#xff08;1&#xff09;sentinel-dashboard下载 &#xff08;2&#xff09;nacos下载 &#xff08;3&#xff09;jmeter下载 &#xff08;4&#xff09;redis下载&#xff08;与流控关系不大&#xff0c;与项目启动有关&#xff09; 2.本微服务项…

【ONLYOFFICE 文档 8.2 版本深度测评】功能革新与用户体验的双重飞跃

引言 在数字化办公的浪潮中&#xff0c;ONLYOFFICE 文档以其强大的在线协作功能和全面的办公套件解决方案&#xff0c;赢得了全球用户的青睐。随着 8.2 版本的发布&#xff0c;ONLYOFFICE 再次证明了其在办公软件领域的创新能力和技术实力。 一.协作编辑 PDF&#xff1a;团队合…

Java爬虫:在1688上“照片快递”上传图片

想象一下&#xff0c;你是一名快递小哥&#xff0c;不过你送的不是包裹&#xff0c;而是图片——而且是用Java编写的爬虫作为你的快递车&#xff0c;将图片快速准确地送到1688的服务器上。今天&#xff0c;我们将一起化身为代码界的“照片快递”&#xff0c;使用Java爬虫技术&a…

深入探索ReentrantLock(三):限时锁申请的艺术

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 前言 一、ReentrantLock限时锁申请 1.限时锁申请的必要性 2.tryLock(long time, TimeUnit unit) 方法讲解 3.限时锁的优势与注意事项 4.tryLock(long time, TimeUnit unit)案例 总结 前言 Java并…

ICPC南京 C.拓扑 + 组合数Dp

题目 给出一棵有根树&#xff0c;问有多少个拓扑序满足 p i i p_ii pi​i 。 n ≤ 5000 n\leq 5000 n≤5000 样例 input1: 4 1 1 2 output1: 3 2 1 2 input2: 9 1 1 2 2 3 3 4 4 5 output2: 672 420 180 160 152 108 120 170 210题解 考虑设 f[x][i] 表示还未在序列中插入…

初始JavaEE篇——多线程(4):wait、notify,饿汉模式,懒汉模式,指令重排序

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;JavaEE 目录 wait、notify 方法 多线程练习 单例模式 饿汉模式 懒汉模式 指令重排序 wait、notify 方法 wait 和 我们前面学习的sleep…

在线预览 Word 文档

引言 随着互联网技术的发展&#xff0c;Web 应用越来越复杂&#xff0c;用户对在线办公的需求也日益增加。在许多业务场景中&#xff0c;能够直接在浏览器中预览 Word 文档是一个非常实用的功能。这不仅可以提高用户体验&#xff0c;还能减少用户操作步骤&#xff0c;提升效率…

C++ 优先算法 —— 查找总价格为目标值的两个商品(双指针)

目录 题目 &#xff1a;查找总价格为目标值的两个商品 1. 题目解析 2. 算法原理 Ⅰ 暴力枚举 Ⅱ 双指针算法 3. 代码实现 暴力枚举 双指针算法 题目 &#xff1a;查找总价格为目标值的两个商品 1. 题目解析 题目截图&#xff1a; 这道题的一个关键的地方&#xff0c;它先…

【操作系统】基于环形队列的生产消费模型

这篇博客的重点在于代码实现&#xff0c;理论部分请看CSDN 一、单生产单消费 1.环形队列的实现 单生产单消费的情况下&#xff0c;我们只需要维护生产者和消费者之间的互斥和同步关系即可 将环形队列封装成一个类&#xff1a;首先给出整体框架&#xff0c;接着会说明每一个…

【Android】Activity组件通信

文章目录 1.使用Intent传递数据2.使用Bundle传递复杂数据3.startActivityForResult 和 onActivityResult4.使用ViewModel共享数据 在Android中&#xff0c;Activity之间的通信是一个常见且重要的任务。以下是一些常用的方法来实现Activity之间的数据传递和通信&#xff1a; 1.使…

如何在Linux环境中的Qt项目中使用ActiveMQ-CPP

文章目录 代码1&#xff1a;消费者代码2&#xff1a;生成者 之前在Linux下的qt程序中使用activeMQ的时候也是用了很多时间去研究&#xff0c;本来想的是好好记录一下&#xff0c;但是当时顾着写代码。很多细节也不想再去走一遍了。大概写一下怎么使用就行了。注意&#xff1a;一…

Qt QCheckBox、QPushButton和QRadioButton详解

QCheckBox&#xff08;复选框&#xff09; 功能&#xff1a;QCheckBox用于创建一个复选框控件&#xff0c;允许用户从多个选项中选择多个。 属性&#xff1a; checkable&#xff1a;决定复选框是否可以被选中或取消选中。checked&#xff1a;表示复选框当前的选中状态&#…

6、显卡品牌分类介绍:技嘉 - 计算机硬件品牌系列文章

技嘉科技是一家以主板、‌显卡在业界缔造无以撼动的地位的科技公司&#xff0c;‌其核心理念是「‌技术创新、‌质量稳定」‌的高标准。‌技嘉专注于关键技术研发&#xff0c;‌其经营范围涵盖家用、‌商用、‌电竞等多元科技领域。‌通过应用突破性的专利技术&#xff0c;‌技…