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:如果觉得有用,麻烦点个赞,加个收藏

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

音视频听译:助力多维度沟通与发展的大门

在全球经济一体化的大背景下&#xff0c;企业之间的跨国合作愈发频繁。在商务会议、谈判和产品演示等活动中&#xff0c;语言的多样性成为了一大挑战。而音视频听译服务能够将不同语言的音频准确转换为目标语言文字&#xff0c;确保信息的精准传达&#xff0c;避免因语言障碍引…

基于MATLAB人脸检测的汽车疲劳驾驶检测

课题介绍 疲劳驾驶导致汽车交通事故逐年增加&#xff0c;为了提升驾车的安全性&#xff0c;需对驾驶员疲劳状态实时监测并及时提醒. 为了提高疲劳驾驶判断效率及准确率&#xff0c;本文运用Viola-Jones 框架特征矩阵进行人脸预判断&#xff1b;预判断过程中为了减少Haar 值计算…

论文阅读(三十二):EGNet: Edge Guidance Network for Salient Object Detection

文章目录 1.Introduction2.Related Works3.Salient Edge Guidance Network3.1Complementary information modeling3.1.1Progressive salient object features extraction3.1.2Non-local salient edge features extraction 3.2One-to-one guidance module 4.Experiments4.1Imple…

MySQL超大分页怎么优化处理?limit 1000000,10 和 limit 10区别?覆盖索引、面试题

1. limit 100000,10 和 limit 10区别 LIMIT 100000, 10&#xff1a; 这个语句的意思是&#xff0c;从查询结果中跳过前100000条记录&#xff0c;然后返回接下来的10条记录。这通常用于分页查询中&#xff0c;当你需要跳过大量的记录以获取后续的记录时。例如&#xff0c;如果你…

源码侦探:理解 numpy 中的 tile 方法

文章目录 pre &#xff1a;先来一张源码的切片1. 参数和基本定义&#xff1a;2. 将 reps 转换为元组&#xff1a;3. 提升数组维度&#xff1a;4. 特殊情况检查&#xff1a;5. 处理数组维度的不同情况&#xff1a;6. 计算输出数组的形状&#xff1a;7. 通过重复构造数组&#xf…

单链表OJ题(3):合并两个有序链表、链表分割、链表的回文结构

目录 一、合并两个有序链表 二、链表分割 三、链表的回文结构 u解题的总体思路&#xff1a; 合并两个有序链表&#xff1a;首先创建新链表的头节点&#xff08;哨兵位&#xff1a;本质上是占位子&#xff09;&#xff0c;为了减少一些判断情况&#xff0c;简化操作。然后我们…

Qt6 CMake 中引入 Qt Linguist 翻译功能

qt cmake 使用自带翻译工具配置步骤 创建Qt CMake 程序配置项目 CMake 及 代码使用流程最终CMake 如下最终工程链接为&#xff1a;参考 创建Qt CMake 程序 配置项目 CMake 及 代码 在CMake 中添加如下代码, 导入相关的翻译库 find_package(QT NAMES Qt6 Qt5 REQUIRED COMPON…

Android IPC机制(一)多进程模式

1. 什么是进程&#xff1f; 进程是操作系统分配资源&#xff08;如 CPU、内存等&#xff09;的基本单位。简单来说&#xff0c;进程是一个正在执行的程序的实例。每个进程都有自己的内存空间、数据栈和其他辅助数据&#xff0c;用于跟踪进程的执行状态。在 Android 中&#xff…

SQL,力扣题目1767,寻找没有被执行的任务对【递归】

一、力扣链接 LeetCode_1767 二、题目描述 表&#xff1a;Tasks ------------------------- | Column Name | Type | ------------------------- | task_id | int | | subtasks_count | int | ------------------------- task_id 具有唯一值的列。 ta…

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

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

[ 问题解决篇 ] 解决远程桌面安全登录框的问题

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

Vue+element-ui实现网页右侧快捷导航栏 Vue实现全局右侧快捷菜单功能组件

Vue+element-ui实现网页右侧快捷导航栏 Vue实现全局右侧快捷菜单功能组件 可视区域没超过当前屏幕高度时候只显示三个菜单效果 可视区域超过当前屏幕高度时,显示可回到顶部菜单的,当然这个菜单显示条件可以自定义,根据需求设置 然后将这个整体功能创建为一个全局组件 代…

苏州金龙新V系客车创新引领旅游出行未来

10月25日&#xff0c;为期三天的“2024第六届旅游出行大会”在风景秀丽的云南省丽江市落下帷幕。本次大会由中国旅游车船协会主办&#xff0c;全面展示了中国旅游出行行业最新发展动态和发展成就&#xff0c;为旅游行业带来全新发展动力。 在大会期间&#xff0c;备受瞩目的展车…

看门狗电路原理与应用

看门狗的原理与应用 看门狗基本原理 看门狗&#xff0c;英文简称为“Watchdog Timer ”或者“Watchdog”&#xff1b; 本质上就是一个定时器的作用&#xff0c;简单理解就是 MCU发出一个周期性的信号&#xff0c;这个信号是满足看门狗芯片内部计时器的时间限制&#xff0c;则…

Caché/IRIS file2Xml 一个将文件转换成Studio导出的xml格式的工具

file2Xml 一个将文件转换成Studio导出的xml格式的工具 通过此工具可以将本地文件转换成xml格式文件&#xff0c;然后通过Studio导入到服务器中&#xff0c;而不再需要其他工具将文件传至服务器。 下面以为ensemble2016自带的一个示例界面增加背景图为例。 http://localhos…

java项目之教师工作量管理系统源码(springboot)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的教师工作量管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 教师工作量管理系统的…

外贸平台开发多语言处理的三种方式

随着全球贸易的不断增长&#xff0c;外贸平台的多语言处理已成为提升用户体验和市场竞争力的重要因素。在开发外贸平台时&#xff0c;有多种方法可以实现多语言支持。本文将探讨三种主要的多语言处理方式&#xff1a;数据库级多语言支持、前端国际化框架以及内容管理系统&#…

《Python网络安全项目实战》项目2 Python基础练习_总复习(1)

《Python网络安全项目实战》项目2 Python基础练习 总复习&#xff08;1&#xff09; 班级&#xff1a; 姓名&#xff1a; 实训成绩&#xff1a; 任务单成绩 &#xff1a; 输入用户名密码并将其输出打印。 userName _____________________ passWord ______________________ #输…

Linux——Ubuntu环境C编程

配置vim编辑器 设置一个tab键为4个空格 打开/etc/vim/vimrc文件&#xff0c;此文件为只读&#xff0c;所以要用sudo访问boot权限&#xff1a; set ts4&#xff08;设置一个tab键为4空格&#xff09; set nu&#xff08;vim编辑器下显示行号&#xff09; gcc编译器 gcc命令…

Java毕业设计-基于微信小程序的校园二手物品交易系统的实现(V2.0)

博主介绍&#xff1a;✌stormjun、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…