# VisualStudio相关知识点 ## 工程创建 ### 工程相关 #### 创建项目 ![image-20250709125108324](./pictures/image-20250709125108324.png) #### 打开项目 ![image-20250710085645958](./pictures/image-20250710085645958.png) ![image-20250710085959302](./pictures/image-20250710085959302.png) #### 加载/卸载项目 加载项目 ![image-20250711084705933](./pictures/image-20250711084705933.png) 卸载项目 ![image-20250711084623468](./pictures/image-20250711084623468.png) #### 设置启动项 ![image-20250710090403869](./pictures/image-20250710090403869.png) ### 解决方案相关 #### 添加项目 ![image-20250710090217653](./pictures/image-20250710090217653.png) ### 文件相关 #### 创建文件 ![image-20250710090809897](./pictures/image-20250710090809897.png) #### 打开文件 ![image-20250710090916630](./pictures/image-20250710090916630.png) #### 包括/排除文件 排除文件 ![image-20250710095042067](./pictures/image-20250710095042067.png) 包括就是将排除的文件添加回去 1. 点击显示所有文件: ![image-20250716132630126](./pictures/image-20250716132630126.png) 2. 展开文件 ![image-20250716132722604](./pictures/image-20250716132722604.png) 3. 鼠标选择排除文件,右键 ![image-20250716132859459](./pictures/image-20250716132859459.png) ![image-20250716132944174](./pictures/image-20250716132944174.png) ## 工程配置 ### 解决方案配置 1. Debug:用于开发和调试应用程序。调试版本包含完整的调试信息,可以用于在调试模式下运行程序。 2. Release:用于发布生产环境中的应用程序。发布版本经过优化,通常比调试版本快,但不包含调试信息。 ![image-20250710100448716](./pictures/image-20250710100448716.png) ### 平台配置 ![image-20250710091509521](./pictures/image-20250710091509521.png) ### 项目类型配置 ![image-20250710091420578](./pictures/image-20250710091420578.png) ### 路径配置 #### 输出路径配置 ![image-20250710092030740](./pictures/image-20250710092030740.png) #### 头文件路径配置 ![image-20250710092136181](./pictures/image-20250710092136181.png) #### 源文件路径配置 ![image-20250710092209778](./pictures/image-20250710092209778.png) #### 库文件路径配置 ![image-20250710092232688](./pictures/image-20250710092232688.png) ### 宏定义 ![image-20250710092856967](./pictures/image-20250710092856967.png) ![image-20250710092931584](./pictures/image-20250710092931584.png) ![image-20250710092821156](./pictures/image-20250710092821156.png) ### 运行库配置 ![image-20250710093134976](./pictures/image-20250710093134976.png) #### 运行库各个选项具体含义 | 编译选项 | 含义 | 链接方式 | 运行库 | 适用场景 | | -------- | ---------------------- | --------------------------------------------- | ------------------------------ | ----------------------------------------------------- | | `/MT` | 多线程静态链接 | 静态链接 LIBCMT.lib | 不依赖 DLL,直接嵌入运行库代码 | 发布版本(Release),不依赖外部 DLL,提高可移植性 | | `/MTd` | 多线程静态链接(调试) | 静态链接 LIBCMTD.lib | 调试用库,嵌入调试符号 | 调试版本(Debug),便于调试但体积大 | | `/MD` | 多线程动态链接 | 静态链接 MSVCRT.lib,运行时依赖 MSVCRxx.dll | 程序运行时需 MSVC 运行时 DLL | 发布版本(Release),节省体积,适合多个程序共享运行时 | | `/MDd` | 多线程动态链接(调试) | 静态链接 MSVCRTD.lib,运行时依赖 MSVCRxxD.dll | 调试用 DLL,含调试信息 | 调试版本(Debug),适用于开发调试 | #### 调用库配置 静态库配置: 在 Visual Studio 中调用静态库(.lib)的一般步骤如下: 1. **添加头文件路径**:在“项目属性 → C/C++ → 常规 → 附加包含目录”中添加 `.h` 文件所在目录。 2. **添加库文件路径**:在“项目属性 → 链接器 → 常规 → 附加库目录”中添加 `.lib` 文件所在目录。 3. **指定库文件名**:在“项目属性 → 链接器 → 输入 → 附加依赖项”中添加库名,如 `xxx.lib`。 4. **保持运行时库一致**:在“C/C++ → 代码生成 → 运行库”中选择与库一致的选项(如 `/MT`、`/MD`)。 5. **在代码中引入头文件**并调用库函数即可。 动态库配置: 在 Visual Studio 中调用动态库(.dll)的一般步骤如下: 1. **添加头文件路径**:在“项目属性 → C/C++ → 常规 → 附加包含目录”中添加 `.h` 文件目录。 2. **添加库文件路径**:在“项目属性 → 链接器 → 常规 → 附加库目录”中添加 `.lib` 文件目录。 3. **指定依赖库名**:在“链接器 → 输入 → 附加依赖项”中添加对应的 `.lib` 文件名。 4. **复制 DLL 文件**:将 `.dll` 文件放在可执行文件所在目录,确保运行时可以找到。 5. **代码中引入头文件** 并调用导入的函数。 ### 安全检查 ![image-20250710093220851](./pictures/image-20250710093220851.png) #### Visual Studio 安全检查的目的 1. **防止缓冲区溢出** 通过检查数组越界、字符串溢出等问题,防止栈溢出攻击(如启用 `/GS` 选项)。 2. **检测非法内存访问** 捕捉空指针解引用、未初始化内存使用等潜在错误。 3. **启用运行时安全检查(RTC)** 调试时检测变量使用错误、函数调用栈损坏等。 4. **强化函数调用安全性** 替换不安全函数(如 `strcpy`)为更安全版本(如 `strcpy_s`),避免未检查的内存拷贝。 5. **防止代码注入和篡改** 使用 DEP、ASLR、栈保护等机制增强运行时安全。 6. **辅助发现潜在漏洞** 通过静态分析、代码检查、警告等级等手段提前发现逻辑缺陷和潜在漏洞。 ## 工程调试 ### 断点 #### 断点创建 - 单击旁边栏出现红点,即创建断点。 #### 断点删除 - 单击红点,红点消失,即删除断点。 #### 断点禁用 - ALT+F9,或者单击鼠标右键 #### 断点启用 - ALT+F9,或者单击鼠标左键 #### 条件断点 - ![image-20250707182318934](C:\Users\wsk\AppData\Roaming\Typora\typora-user-images\image-20250707182318934.png) - 单击鼠标右键 ### 窗口 #### 监视窗口 ![image-20250710093722255](./pictures/image-20250710093722255.png) #### 内存窗口 ![image-20250710093824991](./pictures/image-20250710093824991.png) #### 线程窗口 ![image-20250710093937339](./pictures/image-20250710093937339.png) #### 调用堆栈窗口 ![image-20250710094042822](./pictures/image-20250710094042822.png) ### 单步调试 #### 全速运行 点击继续符号,他就在两个相邻断点间,迅速执行。 ![image-20250710094412173](./pictures/image-20250710094412173.png) #### 重新运行 点击重新运行或者CTRL+SHIFT+F5就重新运行 ![image-20250710094246863](./pictures/image-20250710094246863.png) #### 逐过程 点击逐过程或者F10,逐过程是将主函数里面的子函数当作一个过程,不管子函数里面又引用了多少子函数。 ![image-20250710094211996](./pictures/image-20250710094211996.png) #### 逐语句 点击逐语句或者F11,逐语句是将主函数里面的一个一个语句运行,如遇子函数,进入子函数又逐语句运行。 ![image-20250710094139698](./pictures/image-20250710094139698.png)