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