首页 > 编程语言 >【C++】关于 Visual Studio 的使用技巧(保姆级教程)

【C++】关于 Visual Studio 的使用技巧(保姆级教程)

时间:2024-12-04 21:13:20浏览次数:4  
标签:文件 变量 查看 编译器 C++ Visual Studio 预处理

目录

fliter 视图

visual studio默认是filter视图(中文为筛选器)

image

项目下的是filter而非硬盘目录里实际的文件夹,这时新建的也是filter

image

想要查看硬盘目录里实际的文件夹,点击按钮“show all files(显示所有文件)”即可

image

输出文件位置设置

自定义输出文件位置:

右键项目,选择“Properties(属性)”->“General”->“Output Directory”“Intermediate Directory”(图中展示选项的中文)

image

注意“Configuration(配置)“为”All Configurations(所有配置)”,“Platform(平台)”为“All Platforms(所有平台)”

这边也给出大佬们喜欢用的设置:

Output Directory:$(SolutionDir)bin\$(Platform)\$(Configuration)\

Intermediate Directory:$(SolutionDir)bin\intermediates\$(Platform)\$(Configuration)\

如果你看不懂其指代的具体路径,对路径选择“Edit(编辑)”->“Macros”即可查看

image

应用后可以右键解决方案,选择“Clean Solution(清理解决方案)”即可去掉旧文件

查看预处理结果

首先简答介绍一下编译器的工作原理:编译器首先处理预处理语句,将头文件内容全部复制到代码文件中;其次编译器将所有C++代码转化为机器码,每个cpp文件都被编译成一个目标文件(.obj);最后将独立的目标文件合并成一个可执行文件

Visual Studio默认不输出预处理的结果,想要查看预处理结果需要在“Properties(属性)”->“C/C++”->“Preprocessor”中,将“Preprocess to File”设置为“Yes”(确保编辑的是当前的配置),编译后机会输出预处理文件(.i)

image

将目标文件转换为可读的汇编

编译器编译文件时,每个cpp文件都被编译成一个目标文件(.obj),出于一些调试需求,我们可能需要阅读编译出的汇编语言

在“Properties(属性)”->“C/C++”->“Output Files”中,修改“Assembler Output”即可

image

自定义程序入口

一个可执行文件一定是以main函数为入口吗?答案是否定的

在“Properties(属性)”->“Linker”->“Advanced”中,可以自定义Entry Point

image

调试时查看变量在内存中的具体值

最常见的是用autos,locals和watch监视变量:

  • autos(自动变量窗口):显示当前行和前几行代码中使用的变量,以及下一个将要执行的行中的变量

  • locals(局部变量窗口):显示当前作用域中的所有局部变量及其值

  • watch(监视窗口):允许手动添加并监视任意变量、表达式或内存地址

image
(这里对象p的成员变量Name没有赋值)

一个更高级的方法是查看变量在内存中的具体值:“DEBUG”->“Windows”->“Memory”->“Memory 1”

image

在“Address”中输入变量的内存地址(别忘了使用&取址)即可找到变量在内存中的具体值

image

这里我输入了一个字符串指针,其指向字面量"hello",可以发现内存存储的内容对应了"hello"的 ASCII 编码,只不过由于是64位,因此字符串指针默认为8字节

image

查看代码的反汇编

在调试时,右键“Go To Disassembly”

image

image

如文章有误或疏漏,欢迎评论指出
如有帮助,欢迎关注我的博客,后续也会更新其他的技术内容(坚持日更ing)

特别推荐 Cherno 的C++课程,可以去某管订阅他的频道,B站也有转载

标签:文件,变量,查看,编译器,C++,Visual,Studio,预处理
From: https://www.cnblogs.com/miilue-13/p/18587186

相关文章

  • linux下使用Devhelp添加c++帮助手册
    首先需要两个资源:devhelp和https://zh.cppreference.com/的帮助文档一、准备1.安装devhelpsudoaptinstalldevhelp2.下载https://zh.cppreference.com/的html版本的帮助文档下载以html开头的压缩包 二、将帮助文档解压并将文件放入devhelp目录下1.帮助文档解压后目......
  • C++多线程之异步编程机制
    在C++11及以后的标准中,std::promise和std::future是用于在异步编程场景中实现线程间通信的重要工具。它们可以用来传递异步操作的结果,或者在任务完成时通知等待的线程。下面我将详细解释std::promise和std::future的实现机制,并提供一些使用场景和示例代码。实现机制std::pro......
  • c++中报错:未定义标识符“string” (含解决方法)
    敲代码的时候编译器一直报错如下:解决方案如下1.检查是否引入了头文件,示例如下#include<string>//注意:c语言中的头文件是<string.h>不要搞混了,c++这里没有.h后缀2.是否在代码中指定这个string属于std命名空间示例一:在引入头文件后直接加入这一行usingnamespacestd;......
  • C++ 标准模板库(STL)——bitset的使用
    目录一、问题二、定义和初始化三、访问元素四、修改元素五、成员函数1、count()函数2、size()函数3、test()函数4、any()函数5、none()函数6、all()函数7、to_string()函数8、to_ulong()和to_ullong()六、运算符七、总结一、问题std::bitset是C++标准......
  • 蓝桥杯准备训练(lesson2 ,c++)
    3.1字符型char//character的缩写在键盘上可以敲出各种字符,如:a,q,@,#等,这些符号都被称为字符,字符是⽤单引号括起来的,如:‘a’,‘b’,‘@’。为了能说明这些字符,给他们抽象出⼀种类型,就是字符型,C语⾔中就是char。ASCII编码我们知道在计算机中所有的数据都......
  • 蓝桥杯准备训练(lesson1,c++方向)
    前言报名参加了蓝桥杯(c++)方向的宝子们,今天我将与大家一起努力参赛,后序会与大家分享我的学习情况,我将从最基础的内容开始学习,带大家打好基础,在每节课后都会有练习题,刚开始的练习题难度很低,但希望大家也简单的做一下,防止与课程脱节,最后希望大家都能取得好成绩。1、工具安装......
  • 【C++入门】【六】
    本节目标一、继承的概念及定义二、基类和派生类对象赋值转换三、继承中的作用域四、派生类的默认成员函数五、继承与友元六、继承与静态成员七、复杂的菱形继承及菱形虚拟继承八、继承的总结和反思九、笔试面试题一、继承的概念及定义1.继承的概念继承......
  • 打卡信奥刷题(360)用C++工具信奥P3353[普及组/提高] 在你窗外闪耀的星星
    在你窗外闪耀的星星题目背景飞逝的的时光不会模糊我对你的记忆。难以相信从我第一次见到你以来已经过去了3年。我仍然还生动地记得,3年前,在美丽的集美中学,从我看到你微笑着走出教室,你将头向后仰,柔和的晚霞照耀着你玫瑰色的脸颊。我明白,我已经沉醉于你了。之后,经过几个月......
  • Python扩展C/C++ 实现原理分析
    Python扩展C/C++实现原理分析https://blog.csdn.net/HaoBBNuanMM/article/details/112243129?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522ab2ac79057d38453c0328d6726560514%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request......
  • 自动化测试工具Ranorex Studio(五十一)-如何做基于图像的自动化
    如何做基于图像的自动化如果Ranorex不能明确地识别某些你的GUI元素,那么使用基于图像的机制来自动化它们将会大有帮助。 C#//Createbitmaptosearchfor//withinapplicationformand//clickitBitmapbmp=Ranorex.Imaging.Load(@”..\..\GreenSeaTurtleSma......