# SourceInsight 学习文档

## 1. 软件介绍

SourceInsight 是一款代码阅读和编辑工具，常用于 C/C++ 等工程代码的查看、跳转、搜索和维护。

在嵌入式软件开发中，SourceInsight 常用于查看大型工程代码，能够帮助开发人员快速定位函数、变量、宏定义以及它们之间的引用关系。

### 主要作用

1. 查看和编辑代码；
2. 创建代码工程；
3. 添加已有代码文件；
4. 生成和同步符号表；
5. 快速跳转函数、变量和宏定义；
6. 搜索符号引用关系；
7. 通过不同窗口辅助理解代码结构。

## 2. 学习目标

根据基础学习任务要求，需要熟练使用 SourceInsight 进行代码查看及编辑。

本节主要掌握以下内容：

1. 工程新建与添加；
2. 文件新建与添加；
3. 符号表同步；
4. 视图切换；
5. 常用窗口打开与关闭；
6. 搜索引用。

## 3. 工程新建 / 添加

SourceInsight 中的工程用于管理一组代码文件。创建工程后，可以将源码文件添加到工程中，方便后续进行代码跳转、搜索和查看。

### 3.1 新建工程

新建工程适用于第一次使用 SourceInsight 管理某个代码目录的情况。

#### 操作步骤

1. 打开 SourceInsight；

2. 点击菜单栏中的 **Project**；

3. 选择 **New Project**；

4. 在弹出的窗口中输入工程名称；

5. 选择工程文件保存路径；

   ![](F:\信捷电气\训练营\第一周\学习文档\yuwenhao\SourceInsight\pictures\新建工程弹窗.png)

6. 选择需要管理的源码目录；

   ![](F:\信捷电气\训练营\第一周\学习文档\yuwenhao\SourceInsight\pictures\新建工程弹窗源码目录.png)

7. 根据提示完成工程创建；

8. 工程创建完成后，进入工程文件添加界面；

9. 选择需要加入工程的源码文件；

   ![](F:\信捷电气\训练营\第一周\学习文档\yuwenhao\SourceInsight\pictures\添加文件.png)

10. 点击"Close"，完成工程新建。

#### 说明

新建工程只是让 SourceInsight 管理代码文件，不会改变原始代码的内容。

工程创建完成后，SourceInsight 会根据加入的源码文件建立符号信息，便于后续进行函数跳转和引用搜索。

### 3.2 添加已有工程或代码目录

如果已经存在代码目录，可以将该目录中的文件添加到 SourceInsight 工程中。

#### 操作步骤

1. 打开 SourceInsight；

2. 打开已有工程，或者先新建一个工程；

3. 点击菜单栏中的 **Project**；

4. 选择 **Open Project **；

   ![](F:\信捷电气\训练营\第一周\学习文档\yuwenhao\SourceInsight\pictures\打开工程2.png)

5. 在窗口中选择工程文件；

   ![](F:\信捷电气\训练营\第一周\学习文档\yuwenhao\SourceInsight\pictures\打开工程.png)

6. 点击“OK”；

#### 注意事项

- 添加工程文件时，应优先添加源码文件和头文件；
- 不需要把编译生成的中间文件、日志文件、临时文件加入工程；
- 添加文件后建议同步符号表，保证代码跳转和搜索结果正确。

## 4. 文件新建 / 添加

SourceInsight 不仅可以查看已有文件，也可以新建和编辑代码文件。

### 4.1 新建文件

新建文件适用于需要在工程中新增 `.c`、`.h` 等源码文件的情况。

#### 操作步骤

1. 点击菜单栏中的 **File**；

2. 选择 **New**；

   ![](F:\信捷电气\训练营\第一周\学习文档\yuwenhao\SourceInsight\pictures\新建文件.png)

3. 在新建文件窗口中输入或编辑代码内容；

4. 点击 **File**；

5. 选择 **Save As**；

6. 将文件保存到当前工程对应的源码目录下；

7. 返回 SourceInsight 工程；

8. 点击 **Project**；

9. 选择 **Add and Remove Project Files**；

   ![](F:\信捷电气\训练营\第一周\学习文档\yuwenhao\SourceInsight\pictures\添加文件2.png)

10. 将新建文件添加到工程中；

    ![](F:\信捷电气\训练营\第一周\学习文档\yuwenhao\SourceInsight\pictures\添加文件3.png)

11. 添加完成后，同步符号表。

#### 说明

如果只是新建并保存文件，但没有添加到 SourceInsight 工程中，SourceInsight 可能无法对该文件进行完整的符号分析和引用搜索。

所以新建文件后，需要确认文件已经加入工程。

### 4.2 添加已有文件

添加已有文件适用于外部已经存在代码文件，需要放入 SourceInsight 工程中查看和管理的情况。

#### 操作步骤

1. 打开对应 SourceInsight 工程；

2. 点击菜单栏中的 **Project**；

3. 选择 **Add and Remove Project Files**；

4. 在文件列表中找到需要添加的文件；

5. 选中对应文件；

6. 点击添加；

7. 确认后关闭窗口；

8. 执行符号表同步。

#### 注意事项

- 添加 `.c` 文件后，也要检查相关 `.h` 文件是否已经加入工程；
- 如果添加文件后无法跳转函数或变量，通常需要重新同步符号表；
- 如果工程文件较多，可以按目录批量添加。

## 5. 符号表同步

符号表是 SourceInsight 根据工程中的源码文件分析出来的索引信息。

函数、变量、宏定义、结构体等都可以看作代码中的符号。SourceInsight 通过符号表实现快速跳转、搜索引用和查看关系。

### 5.1 什么情况下需要同步符号表

一般在以下情况需要同步符号表：

1. 新建工程后；
2. 添加新文件后；
3. 删除或移除文件后；
4. 外部工具修改了源码文件后；
5. 代码跳转不准确时；
6. 搜索引用结果不完整时；
7. 函数或变量列表没有更新时。

### 5.2 同步符号表操作步骤

1. 打开 SourceInsight 工程；

2. 点击菜单栏中的 **Project**；

3. 选择 **Synchronize Files**；

   ![](F:\信捷电气\训练营\第一周\学习文档\yuwenhao\SourceInsight\pictures\同步符号表.png)

4. 在弹出的窗口中确认同步范围；

5. 点击"Start"，开始同步；

   ![](F:\信捷电气\训练营\第一周\学习文档\yuwenhao\SourceInsight\pictures\同步开始.png)

6. 等待同步完成；

7. 同步完成后，再进行函数跳转或引用搜索。

### 5.3 说明

同步符号表不会修改源码内容，只是更新 SourceInsight 内部的代码索引信息。

如果代码文件发生变化但 SourceInsight 没有及时识别，可以通过同步符号表解决。

## 6. 视图切换

Source Insight 中的视图切换主要用于调整多个已打开文件窗口的显示方式。

在查看嵌入式工程代码时，经常需要同时打开多个源码文件，例如主函数文件、中断文件、驱动文件和头文件。通过视图切换功能，可以将多个窗口进行层叠、水平平铺、垂直平铺或双窗口显示，方便开发人员对比代码、查看函数调用关系和修改程序。

### 6.1 打开多个文件

在 Source Insight 中，可以同时打开多个文件。

例如：

```text
main.c
stm32f1xx_it.c
readme.txt
```

当多个文件被打开后，Source Insight 会将这些文件作为不同的窗口进行管理。

操作步骤如下：

1. 打开 Source Insight 工程；

2. 在工程文件列表中找到需要查看的文件；

3. 双击打开多个文件；

4. 打开后，可以通过窗口菜单对这些文件窗口进行排列和切换。

![打开多个文件](pictures/SourceInsight_视图切换_打开多个文件.png)

### 6.2 打开窗口排列菜单

视图切换主要通过顶部菜单栏中的 **Window** 菜单完成。

操作路径如下：

```text
Window → Arrange Windows
```

点击 **Arrange Windows** 后，可以看到多种窗口排列方式。

![窗口排列菜单](pictures/SourceInsight_视图切换_窗口排列菜单.png)

常见窗口排列方式如下：

| 选项             | 中文理解   | 作用                            |
| ---------------- | ---------- | ------------------------------- |
| Cascade Windows  | 层叠窗口   | 将多个窗口层叠显示              |
| Tile Horizontal  | 水平平铺   | 将多个窗口按上下方向排列        |
| Tile Vertical    | 垂直平铺   | 将多个窗口按左右方向排列        |
| Tile One Window  | 单窗口显示 | 只显示一个主要窗口              |
| Tile Two Windows | 双窗口显示 | 同时显示两个窗口，快捷键为 `F6` |

### 6.3 Cascade Windows 层叠显示

选择：

```text
Window → Arrange Windows → Cascade Windows
```

可以将多个已打开的文件窗口以层叠方式显示。

层叠显示时，多个窗口会相互覆盖，但每个窗口的标题栏仍然可以看到，方便快速判断当前打开了哪些文件。

操作步骤如下：

1. 先打开多个文件；

2. 点击顶部菜单栏 **Window**；

3. 选择 **Arrange Windows**；

4. 点击 **Cascade Windows**；

5. 多个文件窗口会以层叠方式显示。

![层叠显示窗口](pictures/SourceInsight_视图切换_层叠显示窗口.png)

适用场景：

- 当前打开了很多文件；
- 需要快速查看当前有哪些窗口；
- 不需要同时对比代码，只需要在多个窗口之间切换。

### 6.4 Tile Horizontal 水平平铺

选择：

```text
Window → Arrange Windows → Tile Horizontal
```

可以将多个文件窗口按上下方向排列显示。

水平平铺后，窗口会从上到下排列，适合上下对比不同文件中的代码内容。

操作步骤如下：

1. 打开两个或多个文件；

2. 点击顶部菜单栏 **Window**；

3. 选择 **Arrange Windows**；

4. 点击 **Tile Horizontal**；

5. Source Insight 会将窗口按上下方向平铺显示。

![水平平铺窗口](pictures/SourceInsight_视图切换_水平平铺窗口.png)

适用场景：

- 需要上下对比两个文件；
- 需要查看一个函数的声明和实现；
- 需要同时查看源文件和说明文件。

例如，可以同时查看：

```text
main.c
readme.txt
```

### 6.5 Tile Vertical 垂直平铺

选择：

```text
Window → Arrange Windows → Tile Vertical
```

可以将多个文件窗口按左右方向排列显示。

垂直平铺后，窗口会从左到右排列，适合左右对比代码内容。

操作步骤如下：

1. 打开两个或多个文件；

2. 点击顶部菜单栏 **Window**；

3. 选择 **Arrange Windows**；

4. 点击 **Tile Vertical**；

5. Source Insight 会将窗口按左右方向平铺显示。

![垂直平铺窗口](pictures/SourceInsight_视图切换_垂直平铺窗口.png)

适用场景：

- 需要左右对比 `.c` 文件和 `.h` 文件；
- 需要一边查看函数定义，一边查看函数调用；
- 需要同时查看驱动文件和应用层文件。

例如，可以同时查看：

```text
main.c
main.h
```

或者：

```text
stm32f1xx_it.c
main.c
```

### 6.6 Tile One Window 单窗口显示

选择：

```text
Window → Arrange Windows → Tile One Window
```

可以将当前显示方式切换为单窗口显示。

单窗口显示时，Source Insight 会主要显示当前选中的文件窗口，适合集中查看某一个文件。

操作步骤如下：

1. 打开多个文件；

2. 点击需要重点查看的文件窗口；

3. 点击顶部菜单栏 **Window**；

4. 选择 **Arrange Windows**；

5. 点击 **Tile One Window**；

6. 当前窗口会以单窗口方式显示。

![单窗口显示](pictures/SourceInsight_视图切换_单窗口显示.png)

适用场景：

- 只想专注查看一个文件；
- 当前窗口太多，想恢复单文件查看状态；
- 修改代码时需要更大的编辑区域。

### 6.7 Tile Two Windows 双窗口显示

选择：

```text
Window → Arrange Windows → Tile Two Windows
```

也可以使用快捷键：

```text
F6
```

该功能可以快速切换为两个窗口显示模式。

双窗口显示适合同时查看两个相关文件，例如一个源文件和一个头文件，或者一个函数调用文件和一个函数实现文件。

操作步骤如下：

1. 打开两个或多个文件；

2. 点击顶部菜单栏 **Window**；

3. 选择 **Arrange Windows**；

4. 点击 **Tile Two Windows**；

5. Source Insight 会以两个窗口的方式显示文件；

6. 也可以直接按 `F6` 快速切换双窗口显示。

![双窗口显示](pictures/SourceInsight_视图切换_双窗口显示.png)

适用场景：

- 同时查看 `.c` 文件和 `.h` 文件；
- 同时查看函数调用位置和函数实现位置；
- 对比两个文件中的相似代码；
- 查看中断处理文件和主函数文件之间的关系。

例如：

```text
stm32f1xx_it.c
main.c
```

### 6.8 Pick Window 选择窗口

在 **Window** 菜单中，还可以看到已经打开的文件窗口列表。

例如：

```text
1 stm32f1xx_it.c
2 readme.txt
```

点击对应文件名，可以快速切换到该文件窗口。

如果打开的文件较多，也可以选择：

```text
Window → Pick Window
```

通过窗口选择功能切换到指定文件。

![选择窗口](pictures/SourceInsight_视图切换_选择窗口.png)

适用场景：

- 当前打开文件较多；
- 想快速切换到某个指定文件；
- 不想在多个窗口中手动查找文件。

### 6.9 视图切换作用总结

Source Insight 的视图切换功能可以提高代码查看和分析效率。

常用视图切换方式如下：

| 功能             | 适用情况                         |
| ---------------- | -------------------------------- |
| Cascade Windows  | 打开多个文件时，快速查看窗口数量 |
| Tile Horizontal  | 上下对比两个或多个文件           |
| Tile Vertical    | 左右对比两个或多个文件           |
| Tile One Window  | 专注查看单个文件                 |
| Tile Two Windows | 同时查看两个相关文件             |
| Pick Window      | 在多个已打开窗口之间快速切换     |

在嵌入式工程开发中，常见的使用方式是同时打开主函数文件、中断文件、驱动文件和头文件，通过窗口排列功能进行对比查看。

例如：

```text
main.c：查看主函数和程序流程
stm32f1xx_it.c：查看中断处理函数
gpio.c：查看 GPIO 初始化配置
main.h：查看宏定义和函数声明
```

通过合理使用视图切换功能，可以更方便地阅读工程代码、分析函数关系和修改程序。

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

Source Insight 中的常用窗口和工具栏主要通过顶部菜单栏中的 **View** 菜单进行打开和关闭。

在 Source Insight 中，部分功能属于 **Toolbars（工具栏）**，部分功能属于 **Panels（面板窗口）**。  
勾选表示显示该窗口或工具栏，取消勾选表示关闭或隐藏该窗口或工具栏。

### 7.1 打开 View 菜单

点击顶部菜单栏中的：

```text
View
```

可以看到常用的显示相关功能，例如工具栏、面板窗口、全屏、窗口标签、状态栏、滚动条、符号窗口等。

![View菜单](pictures/SourceInsight_常用窗口_View菜单.png)

常见功能说明如下：

| 功能                  | 作用                                    |
| --------------------- | --------------------------------------- |
| Toolbars              | 打开或关闭工具栏                        |
| Panels                | 打开或关闭面板窗口                      |
| Full Screen           | 全屏显示，快捷键为 `F11`                |
| Window Tabs           | 显示或隐藏窗口标签                      |
| Tab Tray              | 显示或隐藏标签托盘                      |
| Status Bar            | 显示或隐藏状态栏                        |
| Horizontal Scroll Bar | 显示或隐藏水平滚动条                    |
| Vertical Scroll Bar   | 显示或隐藏垂直滚动条                    |
| Symbol Window         | 显示或隐藏符号窗口，快捷键为 `Alt + F8` |
| Overview              | 显示或隐藏代码缩略视图                  |
| Line Numbers          | 显示或隐藏行号                          |

### 7.2 Toolbars 工具栏打开 / 关闭

工具栏用于显示常用功能按钮，例如文件操作、搜索、符号跳转、窗口排列等。

打开方式：

```text
View → Toolbars
```

![工具栏菜单](pictures/SourceInsight_常用窗口_Toolbars菜单.png)

在 **Toolbars** 子菜单中，可以看到多个工具栏选项。

常见工具栏说明如下：

| 工具栏                 | 作用                                       |
| ---------------------- | ------------------------------------------ |
| Main Toolbar           | 主工具栏，显示常用基础操作按钮             |
| Browse Toolbar         | 浏览工具栏，用于代码跳转和浏览             |
| File Toolbar           | 文件工具栏，用于文件新建、打开、保存等操作 |
| Edit Toolbar           | 编辑工具栏，用于复制、粘贴、撤销等编辑操作 |
| Search Toolbar         | 搜索工具栏，用于快速搜索代码内容           |
| Navigation Toolbar     | 导航工具栏，用于前进、后退等代码跳转       |
| Symbols Toolbar        | 符号工具栏，用于符号相关操作               |
| Arrangement Toolbar    | 窗口排列工具栏                             |
| View Toolbar           | 视图工具栏                                 |
| Help Toolbar           | 帮助工具栏                                 |
| Source Control Toolbar | 源码管理工具栏                             |
| Build Toolbar          | 构建工具栏                                 |
| Outline Toolbar        | 大纲工具栏                                 |
| Layout Toolbar         | 布局工具栏                                 |

#### 操作步骤

1. 点击顶部菜单栏 **View**；

2. 选择 **Toolbars**；

3. 在右侧子菜单中选择需要显示的工具栏；

4. 工具栏前面出现 `√`，表示该工具栏已经显示；

5. 如果想关闭某个工具栏，再次点击该工具栏名称，取消 `√` 即可。

#### 示例

如果需要显示搜索工具栏，可以选择：

```text
View → Toolbars → Search Toolbar
```

如果需要关闭搜索工具栏，再次点击：

```text
View → Toolbars → Search Toolbar
```

取消勾选即可。

### 7.3 Panels 面板窗口打开 / 关闭

面板窗口用于辅助查看工程文件、符号信息、上下文信息、函数关系等内容。

打开方式：

```text
View → Panels
```

![面板窗口菜单](pictures/SourceInsight_常用窗口_Panels菜单.png)

在 **Panels** 子菜单中，可以看到多个面板窗口选项。

常见面板窗口说明如下：

| 面板窗口                  | 作用                                   |
| ------------------------- | -------------------------------------- |
| Clip Window               | 剪贴窗口，用于保存和管理代码片段       |
| Bookmark Window           | 书签窗口，用于查看代码书签             |
| Context Window            | 上下文窗口，用于查看当前符号的相关信息 |
| Relation Window           | 关系窗口，用于查看函数或符号之间的关系 |
| Window List               | 窗口列表，用于查看当前打开的窗口       |
| FTP Browser               | FTP 浏览器                             |
| Snippet Window            | 代码片段窗口                           |
| Directory Compare         | 目录比较窗口                           |
| File Compare              | 文件比较窗口                           |
| Project Window            | 工程窗口，用于显示工程相关内容         |
| Project Folder Browser    | 工程文件夹浏览器                       |
| Project File List         | 工程文件列表                           |
| Project File Types        | 工程文件类型                           |
| Project Symbol List       | 工程符号列表                           |
| Project Symbol Categories | 工程符号分类                           |

#### 操作步骤

1. 点击顶部菜单栏 **View**；

2. 选择 **Panels**；

3. 在右侧子菜单中选择需要打开的面板窗口；

4. 面板窗口前面出现 `√`，表示该窗口已经打开；

5. 如果想关闭某个面板窗口，再次点击该窗口名称，取消 `√` 即可。

### 7.4 Project Window 工程窗口

Project Window 用于显示当前 Source Insight 工程中的文件和工程结构。

打开方式：

```text
View → Panels → Project Window
```

![工程窗口](pictures/SourceInsight_常用窗口_ProjectWindow.png)

#### 作用

Project Window 可以帮助用户快速查看当前工程中包含的文件。

常见操作包括：

1. 查看工程中的 `.c`、`.h` 文件；
2. 双击文件打开源码；
3. 快速切换不同文件；
4. 查看工程文件结构。

#### 关闭方式

再次点击：

```text
View → Panels → Project Window
```

取消勾选后，即可关闭或隐藏工程窗口。

### 7.5 Project File List 工程文件列表

Project File List 用于以列表形式显示当前工程中的文件。

打开方式：

```text
View → Panels → Project File List
```

![工程文件列表](pictures/SourceInsight_常用窗口_ProjectWindow.png)

#### 作用

Project File List 适合快速查看工程中所有文件。

例如：

```text
main.c
stm32f1xx_it.c
gpio.c
usart.c
main.h
```

双击列表中的文件，可以直接打开对应源码文件。

#### 关闭方式

再次点击：

```text
View → Panels → Project File List
```

取消勾选后，即可关闭或隐藏工程文件列表。

### 7.6 Symbol Window 符号窗口

Symbol Window 用于显示当前文件中的函数、变量、宏定义等符号。

打开方式：

```text
View → Symbol Window
```

快捷键：

```text
Alt + F8
```

![符号窗口](pictures/SourceInsight_常用窗口_SymbolWindow.png)

#### 作用

当一个源码文件内容较多时，可以通过 Symbol Window 快速定位函数或变量。

例如在 `main.c` 文件中，符号窗口可能会显示：

```text
main
SystemClock_Config
MX_GPIO_Init
Error_Handler
```

双击符号窗口中的函数名，可以快速跳转到该函数所在位置。

#### 关闭方式

再次点击：

```text
View → Symbol Window
```

或者使用快捷键：

```text
Alt + F8
```

即可关闭或隐藏符号窗口。

### 7.7 Project Symbol List 工程符号列表

Project Symbol List 用于显示整个工程中的符号信息。

打开方式：

```text
View → Panels → Project Symbol List
```

![工程符号列表](pictures/SourceInsight_常用窗口_ProjectSymbolList.png)

#### 作用

Project Symbol List 可以查看整个工程中的函数、变量、宏定义等符号。

适用场景：

- 查找工程中的函数；
- 查看工程中的全局变量；
- 查看宏定义；
- 分析工程中有哪些符号。

#### 关闭方式

再次点击：

```text
View → Panels → Project Symbol List
```

取消勾选后，即可关闭或隐藏工程符号列表。

### 7.8 Context Window 上下文窗口

Context Window 用于显示当前光标所在符号的上下文信息。

打开方式：

```text
View → Panels → Context Window
```

![上下文窗口](pictures/SourceInsight_常用窗口_ContextWindow.png)

#### 作用

当光标放在某个函数、变量或宏定义上时，上下文窗口可以辅助显示相关代码信息，方便快速理解当前符号的含义。

例如将光标放到：

```text
SystemClock_Config
```

上下文窗口可能会显示该函数的定义或相关上下文内容。

#### 关闭方式

再次点击：

```text
View → Panels → Context Window
```

取消勾选后，即可关闭或隐藏上下文窗口。

### 7.9 Relation Window 关系窗口

Relation Window 用于查看函数、变量或符号之间的关系。

打开方式：

```text
View → Panels → Relation Window
```

![关系窗口](pictures/SourceInsight_常用窗口_RelationWindow.png)

#### 作用

Relation Window 常用于分析函数调用关系和符号引用关系。

适用场景：

- 查看某个函数被哪些函数调用；
- 查看某个变量在哪些地方被使用；
- 分析程序调用流程；
- 辅助理解嵌入式工程代码结构。

#### 关闭方式

再次点击：

```text
View → Panels → Relation Window
```

取消勾选后，即可关闭或隐藏关系窗口。

### 7.10 Bookmark Window 书签窗口

Bookmark Window 用于查看和管理代码书签。

打开方式：

```text
View → Panels → Bookmark Window
```

![书签窗口](pictures/SourceInsight_常用窗口_BookmarkWindow.png)

#### 作用

书签窗口可以帮助开发人员快速记录和跳转到重要代码位置。

适用场景：

- 标记需要重点查看的代码；
- 标记暂时未处理的问题；
- 快速回到某个函数或代码行。

#### 关闭方式

再次点击：

```text
View → Panels → Bookmark Window
```

取消勾选后，即可关闭或隐藏书签窗口。

### 7.11 Overview 缩略视图

Overview 用于显示当前文件代码的缩略视图，方便快速定位代码位置。

打开方式：

```text
View → Overview
```

![缩略视图](pictures/SourceInsight_常用窗口_Overview.png)

#### 作用

Overview 类似代码缩略地图，可以帮助用户快速查看当前文件整体结构。

适用场景：

- 当前文件代码较长；
- 需要快速滚动到文件某一位置；
- 需要从整体上查看代码分布。

#### 关闭方式

再次点击：

```text
View → Overview
```

取消勾选后，即可关闭或隐藏缩略视图。

### 7.12 Line Numbers 行号显示

Line Numbers 用于显示或隐藏代码行号。

打开方式：

```text
View → Line Numbers
```

![行号显示](pictures/SourceInsight_常用窗口_LineNumbers.png)

#### 作用

显示行号后，可以更方便地定位代码位置。

适用场景：

- 根据报错信息定位代码行；
- 和他人沟通某一行代码；
- 查看搜索结果对应行号。

#### 关闭方式

再次点击：

```text
View → Line Numbers
```

取消勾选后，即可隐藏行号。

### 7.13 Full Screen 全屏显示

Full Screen 用于将 Source Insight 切换为全屏显示。

打开方式：

```text
View → Full Screen
```

快捷键：

```text
F11
```

![全屏显示](pictures/SourceInsight_常用窗口_FullScreen.png)

#### 作用

全屏显示可以扩大代码编辑区域，适合专注阅读或修改代码。

#### 关闭方式

再次按下：

```text
F11
```

或者再次点击：

```text
View → Full Screen
```

即可退出全屏显示。

### 7.14 常用窗口打开 / 关闭总结

Source Insight 中常用窗口和工具栏主要通过 **View** 菜单控制。

常见操作可以简单理解为：

```text
打开或关闭工具栏：
View → Toolbars → 选择对应工具栏

打开或关闭面板窗口：
View → Panels → 选择对应面板窗口

打开或关闭符号窗口：
View → Symbol Window

显示或隐藏行号：
View → Line Numbers

全屏显示：
View → Full Screen 或 F11
```

常用窗口作用总结如下：

| 功能                | 打开路径                            | 主要作用                       |
| ------------------- | ----------------------------------- | ------------------------------ |
| Toolbars            | View → Toolbars                     | 打开或关闭各种工具栏           |
| Project Window      | View → Panels → Project Window      | 查看工程窗口                   |
| Project File List   | View → Panels → Project File List   | 查看工程文件列表               |
| Symbol Window       | View → Symbol Window                | 查看当前文件中的函数、变量、宏 |
| Project Symbol List | View → Panels → Project Symbol List | 查看工程符号列表               |
| Context Window      | View → Panels → Context Window      | 查看当前符号上下文             |
| Relation Window     | View → Panels → Relation Window     | 查看函数或符号关系             |
| Bookmark Window     | View → Panels → Bookmark Window     | 查看和管理书签                 |
| Overview            | View → Overview                     | 显示代码缩略视图               |
| Line Numbers        | View → Line Numbers                 | 显示或隐藏行号                 |
| Full Screen         | View → Full Screen                  | 全屏显示                       |

在嵌入式工程代码阅读中，常用组合如下：

```text
Project Window：快速打开工程文件
Symbol Window：快速定位当前文件中的函数
Relation Window：查看函数调用关系
Context Window：查看当前符号上下文
Line Numbers：方便定位代码行
```
## 8. 搜索引用

搜索引用是 Source Insight 中非常常用的功能，用于查找某个函数、变量、宏定义在工程中的使用位置。

在嵌入式工程开发中，经常需要查看某个函数在哪里被调用，某个变量在哪里被赋值，或者某个宏在哪些文件中被使用。通过搜索引用功能，可以快速定位相关代码位置。

### 8.1 搜索引用的作用

搜索引用主要用于查找符号在工程中的使用情况。

常见用途包括：

| 搜索对象   | 作用                           |
| ---------- | ------------------------------ |
| 函数名     | 查看函数在哪些地方被调用       |
| 变量名     | 查看变量在哪些地方被使用或赋值 |
| 宏定义     | 查看宏在哪些文件中被使用       |
| 结构体成员 | 查看成员变量在哪些位置被访问   |

例如，需要查看函数：

```text
HAL_GPIO_WritePin
```

在哪些地方被调用，就可以使用搜索引用功能。

### 8.2 搜索引用前的准备

在使用搜索引用之前，建议先确认工程符号表已经同步。

如果工程刚创建完成，或者刚添加了新的文件，需要先同步符号表，否则搜索引用结果可能不完整。

操作路径一般为：

```text
Project → Synchronize Files
```

或者使用 Source Insight 中的同步符号表功能。

![同步符号表](pictures/SourceInsight_搜索引用_同步符号表.png)

同步完成后，再进行引用搜索，结果会更加准确。

### 8.3 通过右键菜单搜索引用

这是比较常用的一种搜索引用方式。

#### 操作步骤

1. 打开需要分析的源码文件；

2. 找到需要搜索引用的函数、变量或宏；

   例如：

   ```text
   HAL_GPIO_WritePin
   ```

3. 将鼠标光标放在该符号上；![img](file:///F:/%E4%BF%A1%E6%8D%B7%E7%94%B5%E6%B0%94/%E8%AE%AD%E7%BB%83%E8%90%A5/%E7%AC%AC%E4%B8%80%E5%91%A8/%E5%AD%A6%E4%B9%A0%E6%96%87%E6%A1%A3/yuwenhao/SourceInsight/pictures/SourceInsight_%E6%90%9C%E7%B4%A2%E5%BC%95%E7%94%A8_%E5%8F%B3%E9%94%AE%E8%8F%9C%E5%8D%95.png?lastModify=1783484765)

4. 右键点击该符号；

5. 在右键菜单中选择 **Lookup References** 或类似的引用查找选项；

   ![右键搜索引用](pictures/SourceInsight_搜索引用_右键菜单.png)

6. Source Insight 会在工程中查找该符号的引用位置；

7. 搜索结果会显示在搜索结果窗口中。



### 8.4 通过菜单栏搜索引用

除了右键菜单，也可以通过顶部菜单栏进行搜索引用。

#### 操作步骤

1. 打开源码文件；

2. 选中或将光标放到需要搜索的符号上；

3. 点击顶部菜单栏中的 **Search**；

4. 选择 **Lookup References**；

5. Source Insight 会自动搜索该符号在工程中的引用位置；

6. 搜索结果会显示在搜索结果窗口中。

操作路径可以理解为：

```text
Search → Lookup References
```

![菜单栏搜索引用](pictures/SourceInsight_搜索引用_菜单栏.png)

### 8.5 查看搜索引用结果

执行搜索引用后，Source Insight 会在搜索结果窗口中显示匹配结果。

搜索结果通常包含以下信息：

```text
文件名
行号
引用位置代码
```

例如：

```text
main.c        35    HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
gpio.c        58    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
```

![搜索引用结果](pictures/SourceInsight_搜索引用_结果窗口.png)

#### 跳转到引用位置

在搜索结果窗口中，双击某一条搜索结果，可以直接跳转到对应文件和代码行。

操作步骤如下：

1. 在搜索结果窗口中查看搜索结果；
2. 找到需要查看的引用位置；
3. 点击该条结果左侧按键；
4. Source Insight 会自动打开对应文件；
5. 光标会跳转到对应代码行。

![跳转引用位置](pictures/SourceInsight_搜索引用_跳转引用位置.png)

### 8.6 搜索函数引用

搜索函数引用可以查看某个函数在哪些地方被调用。

#### 示例

需要查看函数：

```text
SystemClock_Config
```

在哪里被调用。

操作步骤如下：

1. 打开包含该函数的源码文件；
2. 将光标放到 `SystemClock_Config` 上；
3. 右键选择 **Lookup References**；
4. 在搜索结果窗口中查看调用位置；
5. 点击该条结果左侧按键跳转到对应代码位置。

#### 作用

通过搜索函数引用，可以快速分析函数调用关系。

例如：

```text
main 函数中调用了 SystemClock_Config
初始化函数中调用了 GPIO 配置函数
中断函数中调用了回调函数
```

### 8.7 搜索变量引用

搜索变量引用可以查看某个变量在哪些位置被使用或修改。

#### 示例

需要查看变量：

```text
count
```

在哪些位置被使用。

操作步骤如下：

1. 找到变量 `count`；
2. 将光标放到变量名上；
3. 右键选择 **Lookup References**；
4. 查看搜索结果；
5. 点击该条结果左侧按键跳转到具体代码位置。

#### 作用

通过搜索变量引用，可以分析变量的使用范围和数据变化过程。

例如：

```text
变量在哪里定义
变量在哪里赋值
变量在哪里参与判断
变量在哪里被函数调用使用
```

### 8.8 搜索宏定义引用

搜索宏定义引用可以查看某个宏在哪些文件中被使用。

#### 示例

需要查看宏：

```text
LED_PIN
```

在哪些位置被使用。

操作步骤如下：

1. 打开包含宏定义的头文件；
2. 找到宏 `LED_PIN`；
3. 将光标放到宏名上；
4. 右键选择 **Lookup References**；
5. 在搜索结果窗口中查看引用位置；
6. 点击该条结果左侧按键跳转查看具体代码。

#### 作用

通过搜索宏定义引用，可以快速判断某个宏的影响范围。

例如：

```text
查看 GPIO 引脚宏在哪些文件中使用
查看功能开关宏是否被调用
查看条件编译宏影响哪些代码
```

### 8.9 搜索引用失败或结果不完整的原因

如果搜索引用时没有结果，或者搜索结果明显不完整，可能有以下原因：

| 原因               | 说明                             |
| ------------------ | -------------------------------- |
| 符号表未同步       | 新添加的文件还没有加入符号表     |
| 文件未加入工程     | Source Insight 没有管理该文件    |
| 搜索的符号拼写错误 | 选中的函数名、变量名或宏名不正确 |
| 工程路径有问题     | 文件路径变化后没有重新同步工程   |
| 搜索范围不正确     | 当前搜索没有覆盖整个工程         |

### 8.10 解决方法

如果搜索引用结果不正确，可以按以下方式处理：

1. 确认相关 `.c`、`.h` 文件已经加入 Source Insight 工程；
2. 执行符号表同步；
3. 确认搜索的函数名、变量名或宏名拼写正确；
4. 关闭并重新打开工程；
5. 必要时重新添加工程文件。

### 8.11 搜索引用总结

搜索引用可以帮助开发人员快速定位符号在工程中的使用位置。

常用搜索对象包括：

| 搜索对象   | 示例                        | 用途                   |
| ---------- | --------------------------- | ---------------------- |
| 函数       | `main`、`HAL_GPIO_WritePin` | 查看函数调用位置       |
| 变量       | `count`、`flag`             | 查看变量使用或赋值位置 |
| 宏定义     | `LED_PIN`、`GPIO_PIN_13`    | 查看宏影响范围         |
| 结构体成员 | `Init.Pin`、`State`         | 查看成员访问位置       |

在嵌入式工程中，搜索引用常用于分析函数调用关系、变量变化过程和宏定义影响范围。

简单理解：

```text
想知道一个函数在哪里被调用：
使用搜索引用。

想知道一个变量在哪里被使用：
使用搜索引用。

想知道一个宏影响哪些代码：
使用搜索引用。
```
## 9. 常见问题

### 9.1 添加文件后无法跳转函数

可能原因：

1. 文件没有真正加入工程；
2. 符号表没有同步；
3. 文件类型没有被 SourceInsight 正确识别；
4. 工程路径或文件路径发生变化。

解决方法：

1. 确认文件已经在 Project Window 中显示；
2. 执行 **Project → Synchronize Files**；
3. 重新打开工程；
4. 检查文件后缀是否正确。

### 9.2 搜索引用结果不完整

可能原因：

1. 相关文件没有加入工程；
2. 符号表没有更新；
3. 搜索的符号名称不准确；
4. 工程代码和实际代码目录不一致。

解决方法：

1. 添加缺失的源码文件和头文件；
2. 同步符号表；
3. 重新搜索引用；
4. 必要时重新建立工程。

### 9.3 工程中看不到新建文件

可能原因：

1. 文件只是保存到了目录中，没有加入 SourceInsight 工程；
2. Project Window 没有刷新；
3. 符号表没有同步。

解决方法：

1. 使用 **Project → Add and Remove Project Files** 添加文件；
2. 执行 **Project → Synchronize Files**；
3. 检查文件是否在正确目录下。

## 10. 总结

SourceInsight 主要用于代码查看、编辑和引用分析。

常用操作可以总结为：

```text
工程新建/添加：用于建立代码管理环境。

文件新建/添加：用于把源码文件加入工程。

符号表同步：用于更新代码索引，保证跳转和搜索准确。

视图切换：用于查看不同代码信息。

常用窗口打开/关闭：用于辅助查看工程结构和符号关系。

搜索引用：用于查找函数、变量和宏的使用位置。
```

在实际嵌入式代码开发中，SourceInsight 可以帮助快速理解工程结构、定位代码位置、分析函数调用关系，提高代码阅读和维护效率。
