【Tools】Visual Studio使用经验介绍(包括基本功能、远程调试、引入第三方库等等)

这里写目录标题

  • 1. VS基本使用
      • 1.1. 快捷键
      • 1.2. 查看变量地址
      • 1.3. 查看代码汇编
      • 1.4. visual studio 热重载功能的使用
      • 1.5. vs远程服务器调试
      • 1.6. 引入第三方库VLD
      • 1.7. release debug模式

1. VS基本使用

1.1. 快捷键

ctrl + c :复制光标所在行    注意:只需要光标在这一行,不需要选中整行
ctrl + x : 剪切光标所在行  注意:只需将光标移至该行,不需要选中整行
ctrl + l(注意是L键) : 删除光标所在行  注意:只需将光标移至该行,不需要选中整行
ctrl + k + c :注释所选代码或光标所在行   注意:先按k,再按c     或者 ctrl+k,ctrl+c
ctrl + k + u:取消注释所选代码或光标所在行   注意:先按k,再按u  或者 
ctrl shift / 快速注释/取消注释  
ctrl + f :在本文件中查找
CTRL+TAB :往前缩进Ctrl + M + O 折叠所有区域

1.2. 查看变量地址

1,查看变量地址,在变量处设置断点,开始调试,右键变量->添加监视 点击调试->窗口->添加内存

参考下面这篇链接
https://blog.csdn.net/weixin_48524215/article/details/120724278

1.3. 查看代码汇编

调试的时候在这打开

1.4. visual studio 热重载功能的使用

以在应用程序运行时进行代码修改,并立即看到结果,而无需重新启动应用程序或中断调试会话。

选择-文件保存时热重载,文件保存一下就直接执行了。

1.5. vs远程服务器调试

在这里插入图片描述

参考下面这篇链接:
https://www.cnblogs.com/apocelipes/p/10899484.html

vs进行远程开发分为两步

  1. 创建远程环境的连接,随后让vs将远程环境中的系统头文件同步到本地(也可以指定其他地方的头文件,后面会讲解),c++的代码补全只需要头文件即可。
  2. 当代码写好后,选择合适的远程环境,vs将目标文件和代码复制到远程环境的指定位置,接着根据你的配置进行编译。
  3. 随后vs将会在console的gdb或gdbserver中运行你的程序,在此期间你可以充分享受vs debugger带来的高效和便利。

编译一下

项目属性:常规【远程生成计算机、根目录、项目目录】

调试模式分gdb、gdbserver,前者让VS在Linux上启动一console,然后运行gdb并返回输出【无法识别彩色输出】
后者会远程启用 gdbserver,本地VS解析回传的数据


接着是配置的重点,首先是配置需要同步的远程环境的头文件,有了这些文件vs才能对你的代码进行自动补全和提示:

1.6. 引入第三方库VLD

安装过程:

Release v2.5.1 · KindDragon/vld

  1. vId下载后安装一直点击下一步,默认安装位置即可;

此时环境变量等等都加到系统里去了,项目里直接#include"vId.h"就没问题但是报错:未识别的头文件;

通常有以下几种可能:

  1. VS 找不到头文件 vId.h
  2. VS 找不到静态库 vId.lib
  3. VS 找不到动态库 vId.dll(运行时报错)
  4. VS 配置(x86/x64)和 vId 不匹配

2、那就手动添加这种第三方库到vs里;添加过程如下:

  • (1)先找vId库的头文件

  • 将这个目录添加到vs项目属性:c/c++ ->常规->附加包含目录 里;这样做是告诉 VS 头文件的路径,否则 #include "vId.h" 会报错。

  • (2)再找vId静态库;把静态库添加到下图链接器里的附加库目录;因为编译阶段,C++ 代码只知道 **vId.h** 里的函数声明,但 不知道具体实现在哪。

  • (3)最后把第三方库的动态库加入到项目的Debug目录下;**vId.dll** 是 动态库,它的作用是 在程序运行时提供函数的实现。

  • 方法1: 找到 **vId.dll**,复制 **vId.dll** 到你的项目目录

  • 方法2: 将 vId.dll 的路径添加到 系统环境变量 PATH

  • 检查 VS 项目配置(32 位 / 64 位) 必须和 **vId.lib** 的架构匹配

静态库(.lib)

  • 静态库是编译时链接的:当你编译你的程序时,静态库的代码会直接嵌入到你的最终可执行文件(.exe)中。
  • 不需要运行时支持:你只要在编译时正确链接静态库即可,运行时不需要额外的 .dll 文件。
  • 适用场景:当你想把所有代码都嵌入到一个 .exe 文件中,避免依赖其他文件。

动态库(.dll)

  • 动态库是运行时链接的:动态库的代码不是直接嵌入到你的 .exe 文件中,而是在程序运行时动态加载。
  • 需要运行时支持:你需要确保 .dll 文件与 .exe 在同一目录(Debug目录下),或者 .dll 路径被添加到系统环境变量 PATH 中。
  • 适用场景:当你想要让多个程序共享同一个 .dll 文件,或者更新程序时只需要替换 .dll 文件。

**vId.lib** 是什么?

  • **vId.lib** 可能是 静态库导入库(用于动态链接)。
  • 如果 **vId.lib** 是静态库,你可以直接将它链接到程序中,所有代码都会被编译进你的 .exe 文件中。
  • 如果 **vId.lib** 是导入库(这里是这个),它仅仅是一个 指向 **vId.dll** 的链接,在编译时用来将函数导入到程序中,但在运行时,程序会依赖 vId.dll 来执行实际的功能。

**vId.dll** 是什么?

  • **vId.dll** 是动态库,它提供了运行时的实际功能。程序在运行时会 加载 **vId.dll** 来执行相关操作。
  • 如果 **vId.lib** 是导入库,则 vId.dll必需的,否则程序会报错,因为找不到 vId.dll 中的实现。

1.7. release debug模式

  1. Release 模式:
  • Release 模式用于生产环境中的最终产品。在这种模式下,编译器通常会应用各种优化,以提高代码的执行效率和减小最终可执行文件的大小。
  • 调试信息通常会被剥离,以减小可执行文件的大小,这样在出现问题时可能会更难进行调试。
  • 代码通常会被优化,以提高性能,但可能会使得调试时变量的值不太容易跟踪。
  • 可执行文件通常会比 Debug 模式下的文件更快运行。
  1. Debug 模式:
  • Debug 模式用于开发和测试阶段,目的是方便开发人员进行调试和定位问题。
  • 在 Debug 模式下,通常会保留调试信息,使得开发人员可以更轻松地进行调试,例如查看变量的值、跟踪函数调用等。
  • 通常不会进行过多的优化,以便开发人员能够更准确地观察代码的运行情况。
  • 可执行文件通常会比 Release 模式下的文件更大,因为包含了更多的调试信息

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

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

相关文章

网络爬虫学习之httpx的使用

开篇 本文整理自《Python3 网络爬虫实战》,主要是httpx的使用。 笔记整理 使用urllib库requests库的使用,已经可以爬取绝大多数网站的数据,但对于某些网站依然无能为力。 这是因为这些网站强制使用HTTP/2.0协议访问,这时urllib和r…

Python内存管理:赋值、浅拷贝与深拷贝解析

赋值与共享资源 在Python中,直接赋值操作(如 list2 list1)会导致两个变量共享同一个内存地址。这意味着对 list1 的修改会直接影响到 list2,因为它们指向同一个对象。 注意: 赋值等于完全共享资源 如果我们不希望这样完全共享&…

CentOS7原有磁盘扩容实战记录(LVM非LVM)【针对GPT分区】

一、环境 二、命令及含义 fdisk ‌ ‌ fdisk‌是一个较老的分区表创建和管理工具,主要支持MBR(Master Boot Record)格式的分区表。MBR分区表支持的硬盘单个分区最大容量为2TB,最多可以有4个主分区。fdisk通过命令行界面进行操…

获取相机图像(ROS2)

文章目录 前言一、获取笔记本自带相机图像1.打开终端2.安装usb-cam功能包3.启动相机节点4.再打开一个终端5.启动rqt查看图像(1)方法一:点击窗口选项,打开图像话题(2)方法二:使用命令行,直接打开图像话题 二、获取USB相机图像总结 …

Go 语言中接口类型转换为具体类型

类型转换方法 在 Go 语言中,将接口类型转换为具体类型主要有以下几种方法: 1. 类型断言(Type Assertion) var i interface{} "hello"// 基本形式 s : i.(string) // 将接口i转换为string类型 fmt.Println(s) // 输…

ES C++客户端安装及使用

介绍 Elasticsearch , 简称 ES ,它是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful 风格接口,多数据源&…

力扣-94.二叉树的中序遍历

题目描述 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 class Solution { public:void inorder(TreeNode* root, vector<int>& res){//C这里&一定要加if(!root)return;inorder(root->left,res);res.push_back(root->val);inorder(ro…

《大模型微调实战:Llama 3.0全参数优化指南》

全参数微调&#xff08;Full Parameter Fine-Tuning&#xff09;是推动大模型适应垂直领域任务的核心技术&#xff0c;尤其对于Llama 3.0这类千亿级参数模型而言&#xff0c;其性能优化与场景适配能力直接决定了实际应用价值。然而&#xff0c;全参数微调面临计算成本高、内存占…

张 提示词优化(相似计算模式)深度学习中的损失函数优化技巧

失函数的解释 损失函数代码解析 loss = -F.log_softmax(logits[

《Spring Boot 4.0新特性深度解析》

Spring Boot 4.0的发布标志着Java生态向云原生与开发效能革命的全面迈进。作为企业级应用开发的事实标准框架&#xff0c;此次升级在运行时性能、云原生支持、开发者体验及生态兼容性四大维度实现突破性创新。本文深度解析其核心技术特性&#xff0c;涵盖GraalVM原生镜像支持、…

协作赋能-1-制造业生产流程重构

制造业生产流程重构——从“信息孤岛”到“全链协同” 在制造业的数字化转型浪潮中&#xff0c;一个看似矛盾的现象正在蔓延&#xff1a;企业部署了ERP、MES、PLM等管理系统&#xff0c;却仍未摆脱“纸质工单满天飞、跨部门扯皮不断”的困境。以汽车制造业为例&#xff0c;其…

基于React的高德地图api教程002:自定义地图样式

文章目录 2、自定义地图样式2.1 自定义底图样式2.2 添加卫星地图和路网图2.3 完整代码下载2、自定义地图样式 2.1 自定义底图样式 高德地图提供了多种地图样式,对底图进行设置,可选样式如下图所示: 添加地图样式切换控件: <div style={{marg

谷歌Gemini生图升级:与GPT-4o的对决,谁更胜一筹?

在人工智能技术的快速发展中&#xff0c;图像生成&#xff08;即“生图”&#xff09;已经成为AI领域的一大热点。谷歌最近对其多模态模型Gemini 2.0 Flash的生图功能进行了升级&#xff0c;从之前的“实验版”&#xff08;Gemini 2.0 Flash Experimental Image Generation&…

OpenAI官方指南,详细解释了何时使用哪种AI模型

&#xff08;1&#xff09;GPT-4o • 日常任务专家&#xff1a;头脑风暴/会议纪要/邮件撰写/创意生成 • 全模态支持&#xff1a;兼容GPTs插件/数据分析/图像生成/画布协作/高级语音等功能&#xff0c;支持文档/图片/CSV/音视频等多格式输入 【典型用例】 • 将会议记录提炼…

火山引擎发展方向

火山引擎作为字节跳动旗下的企业级技术服务平台&#xff0c;要发展客户需要结合自身技术优势、行业趋势和市场需求&#xff0c;制定差异化的策略。以下是一些关键方向和建议&#xff1a; --- ### **一、明确目标市场定位** 1. **聚焦核心赛道** - **泛互联网行业**&…

在 Angular 中, `if...else if...else`

在 Angular 中&#xff0c;模板语法本身并不直接支持 if...else if...else 这样的多条件分支结构。不过&#xff0c;你可以通过使用 *ngIf 指令结合其else模板功能来实现类似的效果。下面是如何模拟if...else if...else逻辑的方法&#xff1a; 示例&#xff1a;实现if...else …

利用Backtrader实现回测策略的可视化与图表绘制

Plotting功能是Backtrader的一大特色,能够帮助直观地展示交易数据、策略表现等信息,为分析和优化交易策略提供有力支持。 (一)Backtrader的主要特点 灵活性:支持多种数据源和交易接口,用户可以根据自己的需求灵活选择。无论是股票、期货、外汇等不同类型的金融市场数据,…

提升英文输入效率:基于Docker的Qwerty Learner本地搭建与使用指南

文章目录 前言1.关于qwerty-learner2.Docker部署3.简单使用演示4.安装cpolar内网穿透5. 配置公网地址6. 配置固定公网地址总结 前言 小伙伴们&#xff0c;你们有没有遇到过这种情况&#xff1a;中文输入流畅自如&#xff0c;一到英文模式就变成了新手司机&#xff1f;别担心&a…

BUUCTF——shrine

BUUCTF——shrine 进入靶场 只有一串代码 import flask import os app flask.Flask(__name__) app.config[FLAG] os.environ.pop(FLAG) #程序从环境变量 FLAG 读取一个敏感值&#xff0c;并存储在 app.config[FLAG] 中。 #安全问题&#xff1a;如果攻击者能访问 app.con…

【Python】对象生命周期全解析

Python对象生命周期全解析 在Python中&#xff0c;一个对象从创建到销毁会经历一系列过程&#xff0c;理解这些过程对于编写高效、可靠的Python代码非常重要。下面我将详细讲解Python对象的完整生命周期。 1. 对象创建阶段 (1) 内存分配 当使用类实例化时(obj MyClass())&…