ソースを参照

VisualStudio revise

master
wsk 5日前
コミット
c219e1ae54
1個のファイルの変更200行の追加139行の削除
  1. +200
    -139
      VisualStudio/VisualStudio.md

+ 200
- 139
VisualStudio/VisualStudio.md ファイルの表示

@@ -1,162 +1,223 @@
# 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)
~~包括就是将排除的文件添加回去~~
### 工程相关
#### 创建项目
![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. 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)

### 宏定义

1. Debug:用于开发和调试应用程序。调试版本包含完整的调试信息,可以用于在调试模式下运行程序。
![image-20250710092856967](./pictures/image-20250710092856967.png)

2. Release:用于发布生产环境中的应用程序。发布版本经过优化,通常比调试版本快,但不包含调试信息。
![image-20250710092931584](./pictures/image-20250710092931584.png)

![image-20250710100448716](./pictures/image-20250710100448716.png)
![image-20250710092821156](./pictures/image-20250710092821156.png)

- 平台配置
### 运行库配置

![image-20250710091509521](./pictures/image-20250710091509521.png)
![image-20250710093134976](./pictures/image-20250710093134976.png)

- 项目类型配置
#### 运行库各个选项具体含义

![image-20250710091420578](./pictures/image-20250710091420578.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),适用于开发调试 |

- 路径配置
- 输出路径配置
![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)
在 Visual Studio 中调用静态库(.lib)的一般步骤如下:

![image-20250710092821156](./pictures/image-20250710092821156.png)
1. **添加头文件路径**:在“项目属性 → C/C++ → 常规 → 附加包含目录”中添加 `.h` 文件所在目录。
2. **添加库文件路径**:在“项目属性 → 链接器 → 常规 → 附加库目录”中添加 `.lib` 文件所在目录。
3. **指定库文件名**:在“项目属性 → 链接器 → 输入 → 附加依赖项”中添加库名,如 `xxx.lib`。
4. **保持运行时库一致**:在“C/C++ → 代码生成 → 运行库”中选择与库一致的选项(如 `/MT`、`/MD`)。
5. **在代码中引入头文件**并调用库函数即可。

- 运行库配置
动态库配置:

![image-20250710093134976](./pictures/image-20250710093134976.png)
在 Visual Studio 中调用动态库(.dll)的一般步骤如下:

- 调用库配置
1. **添加头文件路径**:在“项目属性 → C/C++ → 常规 → 附加包含目录”中添加 `.h` 文件目录。
2. **添加库文件路径**:在“项目属性 → 链接器 → 常规 → 附加库目录”中添加 `.lib` 文件目录。
3. **指定依赖库名**:在“链接器 → 输入 → 附加依赖项”中添加对应的 `.lib` 文件名。
4. **复制 DLL 文件**:将 `.dll` 文件放在可执行文件所在目录,确保运行时可以找到。
5. **代码中引入头文件** 并调用导入的函数。

- 安全检查
### 安全检查

![image-20250710093220851](./pictures/image-20250710093220851.png)
![image-20250710093220851](./pictures/image-20250710093220851.png)

#### Visual Studio 安全检查的目的

1. **防止缓冲区溢出**
通过检查数组越界、字符串溢出等问题,防止栈溢出攻击(如启用 `/GS` 选项)。
2. **检测非法内存访问**
捕捉空指针解引用、未初始化内存使用等潜在错误。
3. **启用运行时安全检查(RTC)**
调试时检测变量使用错误、函数调用栈损坏等。
4. **强化函数调用安全性**
替换不安全函数(如 `strcpy`)为更安全版本(如 `strcpy_s`),避免未检查的内存拷贝。
5. **防止代码注入和篡改**
使用 DEP、ASLR、栈保护等机制增强运行时安全。
6. **辅助发现潜在漏洞**
通过静态分析、代码检查、警告等级等手段提前发现逻辑缺陷和潜在漏洞。

## 工程调试
- 断点

1. 断点创建
- 单击旁边栏出现红点,即创建断点。

2. 断点删除
- 单击红点,红点消失,即删除断点。

3. 断点禁用
- ALT+F9,或者单击鼠标右键

4. 断点启用
- ALT+F9,或者单击鼠标左键
5. 条件断点
- ![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)
### 断点

#### 断点创建

- 单击旁边栏出现红点,即创建断点。

#### 断点删除

- 单击红点,红点消失,即删除断点。

#### 断点禁用

- 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)


読み込み中…
キャンセル
保存