当前位置: 首页 > java >正文

【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.xdnf.cn/news/5441.html

相关文章:

  • 深入理解 Pinia:状态管理的利器
  • [思维模式-29]:《本质思考力》-9- 两种相反的构建与解构系统的思维模式:①自顶向下的规划、分解、牵引;②自底向上的堆叠、聚合。
  • 【stata代码】地方政府驱动企业参与乡村振兴的机制——乡村振兴注意力视角的分析
  • 数据可视化大屏——智慧社区内网比对平台
  • 基于SpringBoot的抽奖系统测试报告
  • 49.EFT测试与静电测试环境和干扰特征分析
  • 2025御网杯wp(web,misc,crypto)
  • #Redis黑马点评#(五)Redisson详解
  • 并发笔记-条件变量(三)
  • 第二十一周:项目开发中遇到的相关问题(二)
  • 使用Visual Studio将C#程序发布为.exe文件
  • java加强 -Collection集合
  • Java基础语法之循环结构
  • immutable.js介绍
  • 【Diffusion】在华为云ModelArts上运行MindSpore扩散模型教程
  • 深入浅出之STL源码分析2_stl与标准库,编译器的关系
  • 解决VirtualBox中虚拟机(ubuntu)与主机(windows)之间互相复制粘贴(文本)
  • 文件批量重命名工具,简单高效一键完成更名
  • 【常用算法:排序篇】4.高效堆排序:线性建堆法与蚂蚁问题的降维打击
  • kubectl系列(十二):查询pod的resource 配置
  • Java定时任务
  • Cribl 利用CSV 对IP->hostname 的转换
  • tokenizer.encode_plus,BERT类模型 和 Sentence-BERT 他们之间的区别与联系
  • 数据结构练习:顺序表题目
  • terraform云上实战(一):执行阿里云云助手命令
  • C++ string初始化、string赋值操作、string拼接操作
  • Celery 在分布式任务调度中的实现原理及 MQ 系统对比
  • GIF图像技术介绍
  • 隐马尔可夫模型(HMM)在彩票预测中的Java实现
  • OpenCV进阶操作:指纹验证、识别