目录
vs的安装
以安装Visual Studio Community2022版本为例
- 在地址下载Visual studio安装向导程序
- 双击运行安装向导程序,勾选使用C++的桌面开发
- 设置安装路径
- 顺利的话安装完毕
visual studio与vc++编译器各个版本对应的关系
- VS2010:vc10
- vs2012:vc11
- vs2013:vc12
- vs2015:vc14
- vs2017:vc15
- vs2019:vc16
- vs2022:vc17
vs下常见项目的文件
- xxx.sln(sln全称solution)是解决方案文件,解决方案下可以有多个项目工程。查看其文件的内容可以观察这个项目由哪个版本的visual studio创建的。
- vcxproj或者vcproj是工程文件,本质上是一个xml文件
vs的工具设置项
- 文本编辑器显示行号
- 由于不同的文本编辑器对tab的解释不同,可能是两个空白字符也可能是4个。因此这里设置插入空格
vs的常用项目工程设置项
- 设置当前项目工程的配置类型,常见的类型有exe、lib、dll
- 设置依赖lib的方式
- 在源文件中使用
#pragma comment(lib, "xxx.lib")
- 在项目=》属性=》VC++目录=》库目录中设置:最好使用相对路径,相对路径是相对于工程文件vcxproj来说的。
- 在项目=》属性=》链接器=》输入=》附加依赖项中设置
- 在源文件中使用
- 设置依赖头文件:和设置依赖lib一样,使用相对路径,相对于工程文件vcxproj
- vs开启多处理器编译:右击项目属性
- 设置当前项目工程编译后的二进制输出目录
- 设置当前项目工程生成中间文件的存放位置,例如.obj文件
- 宏定义
- 调试停止时自动关闭控制台
visual studio中的编码设置
1.单字符和宽字符
- 单字符:一个字节存储
- 宽字符:两个字节存储
2.宽字符相关的数据类型
- wchar_t:typedef unsigned short wchar_t;
wchar_t str[] = L"test";
cout << sizeof(str) << endl; // 10
3.单字符版本和宽字符版本的区分:
#ifdef _UNICODE
#define TEXT(x) L##x // L##x=》L"x"
#else
#define TEXT(x) x
#endif
4.工程项目编码的选择
- 编码选择使用Unicode字符集,则表示使用宽字符
- 编码选择使用多字节字符集,则表示使用单字符使用1个字节存储。清楚这个很关键,在网络上收发包时需要注意
- 设置方式如下:
vs调试
1.基本调试快捷键
- 单步步过:F10
- 单步进入:F11
- 单步步出,不想执行完函数所有的语句可以从函数跳出:shift + F11
- 从一个函数断点跳到下一个函数断点执行:shift + F11
2.留意一些窗口
- 断点窗口
- 线程窗口
- 堆栈窗口
- Auto 窗口
- Local 窗口
- 内存窗口
- 反汇编窗口
- 监视窗口
- 输出窗口
3.断点的类型
- 普通断点
- 条件断点
- 数据断点
4.调试时传入参数
如何快速分析一个项目的程序结构
- 使用调试器将项目启动起来,然后中断下来
- 在线程窗口上过滤掉系统线程,逐个切换线程,查看各个线程的调用堆栈信息
- 了解各个线程在什么地方启动
- 清楚某些线程之间如何交换数据
VS常用快捷键
- CTRL + g:跳到文件的指定行
- vs中函数参数提示快捷键:ctrl + shift + space
- 代码注释:CTRL + K,CTRL + C
- 代码取消注释:CTRL + K,CTRL + u
- 运行(不调试)程序:CTRL + f5
- 调试运行程序:f5
- 逐过程:f10,不能进入函数内部
- 逐语句:f11,可以跳入函数内部
- 快速打开解决方案资源管理器:ctrl + alt + l
vs编译静态lib
- 现有一些源代码文件如下,需求是编译成静态lib
- 打开vs创建新项目,位置选择security目录所在的路径,模板类型选择lib
- 然后移除新建libsecurity项目下的文件。不要右击目录进行删除,这样做的话security.vcxproj中的配置项是没有清理干净的
- 将libsecurity项目下的四个文件复制到security目录下,并将libsecurity目录删除。目录调整结构如下
- 打开libsecurity.sln文件,右击头文件、源文件将需要编译的文件加进来
- 在项目属性页配置好输出目录、目标文件名。预编译头选择不使用
- 结果如下图所示,在输出目录下生成了security.lib,这个lib文件既包含声明,也包含实现
vs编译动态dll
- 和vs编译静态lib同理,模板类型选择dll
- 最终生成dll和lib文件,其中dll包含实现,lib包含声明。
将CMake管理的项目如何生成Visual Studio工程
以libuv为例
- 安装CMake GUI工具
- 打开CMake GUI工具,设置源码目录以及构建目录
- 配置
- 点击Generate
- 打开构建目录下的libuv.sln解决方案文件