|
|
@@ -1,162 +1,223 @@ |
|
|
|
# VisualStudio相关知识点 |
|
|
|
## 工程创建 |
|
|
|
- 工程相关 |
|
|
|
|
|
|
|
- 创建项目 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
- 打开项目 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
- 加载/卸载项目 |
|
|
|
|
|
|
|
加载项目 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
卸载项目 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
- 设置启动项 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
- 解决方案相关 |
|
|
|
|
|
|
|
- 添加项目 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
- 文件相关 |
|
|
|
|
|
|
|
- 创建文件 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
- 打开文件 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
- 包括/排除文件 |
|
|
|
|
|
|
|
排除文件 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
~~包括就是将排除的文件添加回去~~ |
|
|
|
### 工程相关 |
|
|
|
|
|
|
|
#### 创建项目 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
#### 打开项目 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
#### 加载/卸载项目 |
|
|
|
|
|
|
|
加载项目 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
卸载项目 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
#### 设置启动项 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
### 解决方案相关 |
|
|
|
|
|
|
|
#### 添加项目 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
### 文件相关 |
|
|
|
|
|
|
|
#### 创建文件 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
#### 打开文件 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
#### 包括/排除文件 |
|
|
|
|
|
|
|
排除文件 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
~~包括就是将排除的文件添加回去~~ |
|
|
|
|
|
|
|
## 工程配置 |
|
|
|
- 解决方案配置 |
|
|
|
### 解决方案配置 |
|
|
|
|
|
|
|
1. Debug:用于开发和调试应用程序。调试版本包含完整的调试信息,可以用于在调试模式下运行程序。 |
|
|
|
|
|
|
|
2. Release:用于发布生产环境中的应用程序。发布版本经过优化,通常比调试版本快,但不包含调试信息。 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
### 平台配置 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
### 项目类型配置 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
### 路径配置 |
|
|
|
|
|
|
|
#### 输出路径配置 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
#### 头文件路径配置 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
#### 源文件路径配置 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
#### 库文件路径配置 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
### 宏定义 |
|
|
|
|
|
|
|
1. Debug:用于开发和调试应用程序。调试版本包含完整的调试信息,可以用于在调试模式下运行程序。 |
|
|
|
 |
|
|
|
|
|
|
|
2. Release:用于发布生产环境中的应用程序。发布版本经过优化,通常比调试版本快,但不包含调试信息。 |
|
|
|
 |
|
|
|
|
|
|
|
 |
|
|
|
 |
|
|
|
|
|
|
|
- 平台配置 |
|
|
|
### 运行库配置 |
|
|
|
|
|
|
|
 |
|
|
|
 |
|
|
|
|
|
|
|
- 项目类型配置 |
|
|
|
#### 运行库各个选项具体含义 |
|
|
|
|
|
|
|
 |
|
|
|
| 编译选项 | 含义 | 链接方式 | 运行库 | 适用场景 | |
|
|
|
| -------- | ---------------------- | --------------------------------------------- | ------------------------------ | ----------------------------------------------------- | |
|
|
|
| `/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. **代码中引入头文件** 并调用导入的函数。 |
|
|
|
|
|
|
|
- 安全检查 |
|
|
|
### 安全检查 |
|
|
|
|
|
|
|
 |
|
|
|
 |
|
|
|
|
|
|
|
#### Visual Studio 安全检查的目的 |
|
|
|
|
|
|
|
1. **防止缓冲区溢出** |
|
|
|
通过检查数组越界、字符串溢出等问题,防止栈溢出攻击(如启用 `/GS` 选项)。 |
|
|
|
2. **检测非法内存访问** |
|
|
|
捕捉空指针解引用、未初始化内存使用等潜在错误。 |
|
|
|
3. **启用运行时安全检查(RTC)** |
|
|
|
调试时检测变量使用错误、函数调用栈损坏等。 |
|
|
|
4. **强化函数调用安全性** |
|
|
|
替换不安全函数(如 `strcpy`)为更安全版本(如 `strcpy_s`),避免未检查的内存拷贝。 |
|
|
|
5. **防止代码注入和篡改** |
|
|
|
使用 DEP、ASLR、栈保护等机制增强运行时安全。 |
|
|
|
6. **辅助发现潜在漏洞** |
|
|
|
通过静态分析、代码检查、警告等级等手段提前发现逻辑缺陷和潜在漏洞。 |
|
|
|
|
|
|
|
## 工程调试 |
|
|
|
- 断点 |
|
|
|
|
|
|
|
1. 断点创建 |
|
|
|
- 单击旁边栏出现红点,即创建断点。 |
|
|
|
|
|
|
|
2. 断点删除 |
|
|
|
- 单击红点,红点消失,即删除断点。 |
|
|
|
|
|
|
|
3. 断点禁用 |
|
|
|
- ALT+F9,或者单击鼠标右键 |
|
|
|
|
|
|
|
4. 断点启用 |
|
|
|
- ALT+F9,或者单击鼠标左键 |
|
|
|
5. 条件断点 |
|
|
|
-  |
|
|
|
- 单击鼠标右键 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 窗口 |
|
|
|
- 监视窗口 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
- 内存窗口 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
- 线程窗口 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
- 调用堆栈窗口 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
- 单步调试 |
|
|
|
- 全速运行:点击继续符号,他就在两个相邻断点间,迅速执行。 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
- 重新运行:点击重新运行或者CTRL+SHIFT+F5就重新运行 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
- 逐过程:点击逐过程或者F10,逐过程是将主函数里面的子函数当作一个过程,不管子函数里面又引用了多少子函数。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
- 逐语句:点击逐语句或者F11,逐语句是将主函数里面的一个一个语句运行,如遇子函数,进入子函数又逐语句运行。 |
|
|
|
|
|
|
|
 |
|
|
|
### 断点 |
|
|
|
|
|
|
|
#### 断点创建 |
|
|
|
|
|
|
|
- 单击旁边栏出现红点,即创建断点。 |
|
|
|
|
|
|
|
#### 断点删除 |
|
|
|
|
|
|
|
- 单击红点,红点消失,即删除断点。 |
|
|
|
|
|
|
|
#### 断点禁用 |
|
|
|
|
|
|
|
- ALT+F9,或者单击鼠标右键 |
|
|
|
|
|
|
|
#### 断点启用 |
|
|
|
|
|
|
|
- ALT+F9,或者单击鼠标左键 |
|
|
|
|
|
|
|
#### 条件断点 |
|
|
|
|
|
|
|
-  |
|
|
|
- 单击鼠标右键 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 窗口 |
|
|
|
|
|
|
|
#### 监视窗口 |
|
|
|
|
|
|
|
####  |
|
|
|
|
|
|
|
#### 内存窗口 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
#### 线程窗口 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
#### 调用堆栈窗口 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
### 单步调试 |
|
|
|
|
|
|
|
#### 全速运行 |
|
|
|
|
|
|
|
点击继续符号,他就在两个相邻断点间,迅速执行。 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
#### 重新运行 |
|
|
|
|
|
|
|
点击重新运行或者CTRL+SHIFT+F5就重新运行 |
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
#### 逐过程 |
|
|
|
|
|
|
|
点击逐过程或者F10,逐过程是将主函数里面的子函数当作一个过程,不管子函数里面又引用了多少子函数。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
#### 逐语句 |
|
|
|
|
|
|
|
点击逐语句或者F11,逐语句是将主函数里面的一个一个语句运行,如遇子函数,进入子函数又逐语句运行。 |
|
|
|
|
|
|
|
 |
|
|
|
|