发布时间:2026-08-31 16: 22: 00
Source Insight的Relation Window可以根据当前选中的符号显示函数调用、被调用关系、引用关系、类继承和结构成员等信息。阅读大型C/C++工程时,可以把函数关系设置成Calls或Calls and Callers,跟随光标快速查看调用链。如果窗口已经打开却没有函数调用信息,应先确认当前符号被正确识别,再检查Relationship、自动跟踪、Call Graph Filter以及工程符号数据库是否正常。
一、Source Insight怎么设置关系窗口
Relation Window会根据当前符号类型采用不同的Relationship Rule,因此查看函数调用前,需要先把Function对应的关系设置正确。一个关系窗口也可以根据函数、类型、变量等不同符号自动切换显示内容。
1、打开Relation Window
①打开已经建立完成的Source Insight工程。
②进入【View】→【Panels】→【Relation Window】。
③把Relation Window拖到编辑器右侧或底部。
④在源码中把光标放到一个函数名上。
⑤等待窗口自动读取当前符号。
⑥如果窗口没有立即变化,点击工具栏中的【Refresh Relation Window】。
⑦需要固定当前调用树时,点击关系窗口工具栏上的【Lock】按钮。
锁定以后,移动源码光标不会改变当前Relation Window内容,需要查看其他函数时可以解除Lock,或者选择新函数后手动执行Refresh。
2、设置函数调用关系
①在Relation Window工具栏中打开【Relation Window Options】。
②找到【View Relationship】相关设置。
③选择符号类型【Functions】。
④需要查看当前函数调用了哪些函数时,将Relationship设置为【Calls】。
⑤既想看调用函数,又想看哪些函数调用当前函数时,选择【Calls and Callers】。
⑥需要查看当前函数被哪些位置引用时,可以改为【References】。
⑦设置【Levels】控制自动展开层数。
⑧点击【OK】返回Relation Window。
【Calls】表示当前函数内部引用或调用的其他函数,【References】则从相反方向查找哪些符号引用当前函数。方向设置错误时,很容易误认为调用信息没有生成。
3、设置自动符号跟踪
①再次进入【Relation Window Options】。
②找到【Automatic Symbol Tracking】。
③点击【Tracking Options】。
④选择【Track selected symbol】时,窗口跟踪当前光标所在的具体符号。
⑤希望无论光标位于函数体什么位置都查看当前函数时,选择【Track the enclosing function or class】。
⑥不要把Automatic Symbol Tracking设置成【Off】。
⑦保存设置。
⑧返回代码区移动光标,检查Relation Window是否自动切换。
二、Source Insight关系窗口不显示调用信息如何排查
Relation Window为空时,先测试Source Insight能不能识别当前函数。如果【Jump to Definition】和【Lookup References】同样无法工作,问题通常不只是关系窗口设置,而是工程文件、解析结果或符号数据库不完整。
1、确认函数已经被识别为符号
①把光标放到函数定义名称上。
②执行【Jump to Definition】。
③确认Source Insight能够跳到正确的函数定义。
④再执行【Lookup References】。
⑤检查Search Results是否能够找到函数引用。
⑥如果定义和引用都找不到,打开【Project】检查对应源文件是否已经加入当前工程。
⑦头文件和实现文件缺失时,把相关文件补充到工程中。
⑧完成后执行一次工程同步。
Relation Window依赖Source Insight建立的符号和引用索引。如果函数本身没有进入符号数据库,单独刷新窗口不会产生调用树。
2、检查Relationship和过滤条件
①打开【Relation Window Options】。
②确认【Functions】对应的关系仍为【Calls】或【Calls and Callers】。
③点击【Call Graph Filtering】。
④检查【Exclude Symbols】中有没有误加入需要查看的函数。
⑤取消不必要的排除条件。
⑥进入【Symbol Types】。
⑦确认Function没有被过滤。
⑧保存后点击【Refresh Relation Window】重新计算。
Call Graph Filter可以把指定符号排除在调用树之外。如果之前为了隐藏系统函数、库函数或宏配置过过滤规则,也可能把项目自身函数一起过滤掉。
3、检查当前代码是不是间接调用
①定位Relation Window中缺失的调用语句。
②检查源码是不是普通函数调用。
③如果通过函数指针调用,确认指针实际指向关系能否被静态解析。
④C++工程中检查虚函数、模板和宏展开产生的调用。
⑤对疑似函数执行【Lookup References】。
⑥比较Reference结果与Calls结果。
⑦宏较多时再检查Call Graph Filter是否排除了Macro。
Relation Window根据静态源码关系建立调用图。函数指针、运行时绑定和部分复杂宏无法像直接函数调用一样稳定解析,因此源码实际运行时存在调用,并不代表静态调用树一定能完整还原。
三、关系窗口仍为空怎么检查工程索引
Relationship设置没有问题后,应继续验证工程数据库。大量文件修改、代码目录替换或Source Insight异常退出后,符号数据库可能没有及时反映当前源码。
1、先同步工程文件
①保存当前修改。
②进入【Project】。
③执行【Synchronize Files】。
④等待Source Insight扫描工程文件变化。
⑤重新打开目标源码。
⑥选择函数并执行【Refresh Relation Window】。
如果只是新增或修改了一批文件,可以先通过同步更新解析结果,不必直接重建整个工程。
2、重新建立项目数据库
①进入【Project】→【Rebuild Project】。
②需要重新解析全部源码时选择【Re-Parse all source files】。
③怀疑项目数据库异常时,可以使用完整重建方式。
④需要彻底重新生成符号数据时选择【Re-Create the whole project from scratch】。
⑤等待所有源码重新扫描完成。
⑥打开目标函数。
⑦重新检查【Calls】和【References】。
完整重建会重新产生工程的符号数据库和索引,更适合文件数量变化较大或符号关系明显异常的情况。
3、检查文件类型和语言解析
①找到无法识别调用关系的源码文件。
②检查文件扩展名。
③进入【Options】中的File Type相关设置。
④确认该扩展名绑定到了正确语言解析器。
⑤自定义后缀文件要检查是否被当成普通文本。
⑥修正文件类型后重新同步或重建工程。
⑦再次检查函数是否能够Jump to Definition。
总结
Source Insight设置关系窗口时,可以通过Relation Window Options把函数关系设为Calls、Calls and Callers或References,再结合自动符号跟踪查看当前代码的调用关系。窗口不显示调用信息时,应先确认函数符号能够被正常识别,再检查Relationship和Call Graph Filter;如果定义、引用和调用信息同时异常,则继续同步或重建工程符号数据库,并核对文件类型和语言解析设置。如需进一步了解Source Insight关系窗口、函数调用树与符号关系异常排查方法,欢迎联系咨询。
展开阅读全文
︾