# SourceInSight相关知识点
## 常规操作
### 工程新建/添加

1. 选择工程文件的位置

![1752034385269](./pictures/1752034385269.png)

2. 选择源码位置

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

   3. 将源码导入

   ![image-20250709121914914](./pictures/image-20250709121914914.png)
   
   - Add:基本的文件添加操作
   - Add All:添加整个工程所有的源文件，最多只能添加下一级的文件（然后再选择是否递归添加子目录中的源文件,见上图对话框就和Add Tree功能类似）
   - Add Tree:添加指定的文件夹以及其子目录下的源代码文件
   - Remove Tree:和Add Tree的功能相反

### 文件新建/添加

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

### 符号表同步

符号表同步 = 把源码中的函数、变量、类型等信息提取出来，建立一个可快速查找的数据库

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

- **Force all files to be re-parsed**

  强制重新解析所有文件。

  -  作用：无论文件有没有改动，**全部源文件都会重新解析一遍**，重新生成符号。
  -  使用场景：
    - 大范围修改了宏定义、头文件或库文件；
    - 项目结构变化较大；
    - 符号跳转失效、显示不准确时使用；
  -  会花比较长的时间。

- **Synchronize the current source file only**

  只同步当前打开的源文件。

   作用：只更新你当前正在查看的文件的符号信息。

   使用场景：

  - 你刚刚改动了当前文件的一些函数或变量，希望立即生效；
  - 快速同步，不影响其他文件。

  - 其他文件不受影响，如果涉及头文件或其他依赖文件，可能会不完整。

- **Add new files automatically**

  自动添加新文件到项目中。

  -  作用：在同步过程中，如果发现了你源码目录下的**新文件**（比如新加的 `.c/.h` 文件），会**自动加入工程并解析符号**。
  -  使用场景：
    - 经常手动往目录里加文件的人建议勾上；
    - 适合多人协作开发时文件频繁变动。

- **Remove missing files from project**

  自动从工程中移除找不到的文件。

  -  作用：如果项目中之前包含的某些源文件**物理上已经被删除或移动**，则自动从工程移除它们。
  -  使用场景：
    - 清理项目符号库；
    - 文件重命名或移动后保持项目干净。
  -  小心使用，可能会误删临时缺失但之后会恢复的文件引用。

### 视图切换

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

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

### 常用窗口打开/关闭

常见四大窗口:

1. project  Window:查看我们的工程所在文件夹以及文件夹下的文件(项目窗口)

   - 显示当前项目中的所有源文件、头文件、库文件、组（Group）等结构。

   - 可以进行添加、删除、重新组织源文件。

   - 常用于“管理和构建项目结构”。

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

2. Symbol Window:用于查看我们开启的文件以及文件内所包含的函数（符号窗口）

   显示项目中所有的变量、函数、宏、类型等“符号”的定义。

   支持快速导航，比如双击跳转到变量定义。

   类似于 VSCode 的“Outline” 视图。

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

3. Context Window串口：用于查看，函数中某个参数与函数的关系（上下文窗口）

   显示当前代码所在的函数、命名空间、类的上下文路径。

   类似于“你当前在哪个作用域”。

   通常用于调试或阅读代码时的层级定位。

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

4. Relation Window窗口:用于查看函数以及参数所定义的位置（关系窗口）

   显示函数或变量之间的“调用关系”、“被调用关系”、“引用关系”。

   用于分析函数调用链、依赖关系。

   类似于“调用图”、“依赖图”。

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

   

### 搜索引用

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

## 普通文本搜索（Search → Find）

- **快捷键**：`Ctrl + F`
- **作用**：查找文件中出现的文本（**不区分语法符号**，纯字符串匹配）
- **功能亮点**：
  - 支持大小写匹配
  - 支持正则表达式（Regular Expression）
  - 支持从当前位置、整个文件或选中区域查找
- **适用场景**：
  - 查找某个宏、错误码、注释等非符号内容
- **缺点**：
  - 找不到跨文件定义、不支持跳转到符号

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

| 选项                    | 作用                         | 典型用法/说明                                     |
| ----------------------- | ---------------------------- | ------------------------------------------------- |
| Case Sensitive          | 区分大小写匹配               | 精确匹配变量名或关键字大小写                      |
| Use Regular Expressions | 使用正则表达式匹配           | 复杂模式搜索，比如匹配数字、特定格式字符串        |
| Wrap Around             | 搜索到文件末尾后从头继续搜索 | 循环全文搜索，避免漏掉匹配项                      |
| Select When Found       | 搜索到匹配文本时自动选中     | 方便复制、替换操作                                |
| Whole Words Only        | 只匹配完整单词               | 避免匹配单词内部字符串，如避免 `int` 匹配 `print` |

| 设置                  | 效果说明                         |
| --------------------- | -------------------------------- |
| Forward + Whole File  | 从当前位置往下搜索，直到文件结尾 |
| Backward + Whole File | 从当前位置往上搜索，直到文件开头 |
| Forward + Selection   | 在选中的代码块中，从上往下查找   |
| Backward + Selection  | 在选中的代码块中，从下往上查找   |



## 全局搜索（Search → Find in Files）

- **快捷键**：`Ctrl + Shift + F`
- **作用**：在整个工程或指定路径中查找文本（可正则）
- **功能亮点**：
  - 可设置搜索路径、文件类型（*.c、*.h等）
  - 可将结;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;果导出为列表窗口
- **适用场景**：
  - 搜索项目中所有文件中包含“某字符串”的位置
- **常用于**：
  - 搜索日志宏 `LOG_ERR`、关键字 `#define` 等

| 序号 | 选项名称                    | 中文含义       | 功能说明                                                   | 常用场景示例                            |
| ---- | --------------------------- | -------------- | ---------------------------------------------------------- | --------------------------------------- |
| 1    | **Project Wide**            | 项目范围搜索   | 在整个项目中的所有文件进行搜索，仅对已加入项目的文件生效。 | 搜索项目中某变量或函数的所有引用        |
| 2    | **Include Subdirectories**  | 包括子目录     | 搜索指定文件夹时，递归进入子目录一并搜索。                 | 搜索多层文件夹下的所有 `.c/.h` 文件内容 |
| 3    | **Case Sensitive**          | 区分大小写     | 搜索时大小写敏感，严格匹配字母大小写。                     | 精确查找区分大小写的变量名，如 `MyVar`  |
| 4    | **Use Regular Expressions** | 使用正则表达式 | 启用正则表达式语法，支持复杂模式匹配。                     | 查找函数调用：`foo\(`，匹配 `foo()`     |
| 5    | **Find Non-Matching**       | 查找不匹配项   | 仅显示不包含搜索关键词的文件或行。                         | 找出没使用某宏或函数的文件              |
| 6    | **Whole Words Only**        | 全字匹配       | 仅匹配完整单词，避免匹配词语中的一部分。                   | 搜索 `int` 不匹配 `print`               |
| 7    | **Skip Inactive Code**      | 跳过无效代码   | 不在条件编译屏蔽掉的代码中搜索（如 `#if 0`）。             | 排除死代码，聚焦于当前编译路径          |
| 8    | **Skip Comments**           | 跳过注释       | 不在注释中搜索，只搜索真正代码部分。                       | 查找实际代码逻辑，排除注释中的说明      |
| 9    | **Search Only Comments**    | 仅搜索注释内容 | 只在注释中查找，不搜索代码。                               | 搜索 `TODO`、`FIXME`、版权信息等        |



| 序号 | 选项名称 | 中文含义 | 功能说明 | 常用场景示例 |
|--------|--------------|-------------|---|-----|
| 1    | **Search Project** | 搜索整个项目 | 在当前 Source Insight 项目的所有文件中执行搜索（不包括未加入项目的文件）。 | 查找整个项目中函数或宏的定义、引用等。 |
| 2    | **Case Sensitive** | 区分大小写 | 只匹配大小写完全相同的内容（例如 `MyVar` ≠ `myvar`）。 | 精确搜索变量、函数名，防止误匹配。 |
| 3    | **Whole Words Only** | 全字匹配 | 只匹配完整单词，不匹配单词的一部分（`int` 不会匹配 `print`）。 | 搜索关键字、类型名、变量名时避免误匹配。 |
| 4    | **Skip Inactive Code** | 跳过无效代码 | 不搜索被 `#if 0`、`#ifdef` 等条件屏蔽的代码块。 | 避免搜索到未编译的旧代码或无效代码。 |
| 5    | **Skip Comments** | 跳过注释 | 忽略注释内容，仅在代码主体中搜索。 | 搜索变量或调用语句，排除说明性文字。 |
| 6    | **Search Only Comments** | 仅搜索注释 | 只搜索注释区域，忽略代码区域。 | 查找 `TODO`、`FIXME`、文档注释等信息。 |
| 7    | **Smart Reference Matching** | 智能引用匹配 | 更智能地匹配标识符引用，考虑语言结构（仅对支持语义分析的工程有效）。 | 查找函数、变量等引用时更精准（推荐勾选）。 |
| 8    | **Touch Files and Cause Recompile** | 修改文件触发重编译 | 搜索中访问的文件会被标记为“已改动”，可能导致重新编译（小心使用）。 | 不常用，仅在希望通过搜索触发某些构建系统行为时用 |
## 符号查找（Search → Lookup Symbol）

- **快捷键**：`Ctrl + /`
- **作用**：查找并跳转到某个“符号”的定义（函数、变量、宏等）
- **依赖符号表同步**
- **功能亮点**：
  - 模糊匹配，支持部分输入即可补全
  - 可以定位到头文件或函数体定义
- **适用场景**：
  - 快速跳转函数/变量定义
- **缺点**：
  - 搜不到未同步的符号（需手动同步）

## 同步滚动

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

## 改字体

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

## 备份

**手动备份**

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

**自动备份**

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

**打开备份文件**

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

## 文件比较

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





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

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