SourceSeek是一款VSCode插件,用于C/C++代码的浏览,跳转,利用cscope和ctags建立索引数据库,搜索很快。vscode自带cpp插件不建数据库,找符号是临时搜索,对于大项目很慢,在服务器上远程使用可能会把CPU资源全占掉,造成别人登录非常卡顿。
另外和clangd这样的插件相比,不需要通过编译,有编译错误也没关系。
另外还提供了强大的历史符号浏览记录功能,能够把浏览的函数调用栈记录下来,保存在文件中,下次再加载,查看相关函数就非常方便了。
对于linux内核这样复杂的代码,一个符号可能有很多定义,也有不同通过函数指针的定义,可以手动建立函数调用关系链接,下次再看的时候,就不用再一个一个找了,也可以把记录文件分享给别人。
并且支持导入linux内核autoconf.h这样的宏定义文件,在显示代码的时候,如果没有被宏激活的代码,将会显示会灰色。内置的cscope/ctags也支持导入宏定义,在创建索引库的时候,跳过未被宏激活的代码。
可以在应用市场搜SourceSeek安装。
功能介绍:
建立数据库
打开一个目录,第一次搜索时会自动建立cscope/ctags数据库,也可以自已通过命令行提前生成
cscope -Rcbqk或先建立cscope.files文件, 再cscope -cbqk
ctags --fields=+i -Rno
插件包里自带windows/linux的cscope/ctags/readtags命令,linux版本可能和所用的发行版不一致,可以在设置里修改。
Outline窗口:
显示文件中的函数结构等,并且可以切换只显示函数
Jump
Go to Definition菜单 F12或 Ctrl+Click 一个符号
跳转到定义处,如果有多个,显示一个插入式窗口
Go to Reference
跳转到引用处,如果有多个,显示一个插入式窗口
Call Hierarchy窗口
All reference窗口
预览
鼠标悬停在符号上时,在右边窗口显示改符号的定义
也可以设置成悬浮窗口预览,除了函数,结构,宏定义等默认通过悬浮窗口预览,函数在右边编辑窗口预览,可以在状态栏菜单中设置函数也用悬浮窗口预览。
宏识别与低亮显示
内置的ctags和cscope修改增加了导入宏定义文件,例如导入linux kernel编译生成的autoconf.h文件,则没有被宏激活的代码不会生成索引。
另外在编辑器窗口,未激活的代码显示为灰色。
内置的ctags和cscope修改增加了导入宏定义文件,例如导入linux kernel编译生成的autoconf.h文件,则没有被宏激活的代码不会生成索引。
另外在编辑器窗口,未激活的代码显示为灰色。
全局搜索
在上方键入#后面跟符号,可以全workspace搜符号
文本搜索
双击选中一个单词,右键菜单中可以搜索,跳转到搜索窗口
历史记录窗口
历史记录窗口记录跳转定义,Call Hierarchy, reference by所搜索的符号的历史。自动保存在workspace目录,下次加载,自动把历史记录加载进来。
也可以通过按钮保存到文件和从文件加载。
可以过滤只显示函数。
对于符号定义,如果某个符号有多个定义,会在子节点中显示
对于符号调用链,在CALLERS OF窗口中一层一层显示某一个调用链,在历史记录中会以子节点记录下来。某一个调用链可以拷贝到剪贴板上。
手动建立调用关系
在某些函数指针调用,或者多层的调用,想省去中间调用过程,直接调到关键函数,可以手动建立函数调用链接。
通过双击定义处函数名符号,弹出菜单(Link Caller/Mark Definition), 点击以后,弹出菜单,可以选择调用点,或者取消菜单,可以标记一个定义,供Link Definition的时候选择。
通过双击定义处函数名符号,弹出菜单(Link Definition/Mark Caller), 点击以后,弹出菜单,可以选择函数名,或者取消菜单,可以标记一个调用点,供Link Caller的时候选择。
弹出菜单,除了标记的函数,菜单也会显示历史记录中的函数名供选择
可以右键菜单显示建立的调用关系
在下方OUTPUT窗口显示
在call Hierachy中可以显示手动建立的调用关系,F12也可以跳转到手动建立的函数中。
在项目的workspace中自动保存这个项目的函数指针map, 每次打开,自动加载。
状态栏快速设置
点击状态栏CodeSeek,显示几个切换开关
1.使能鼠标悬停预览
2.使用同一个tab打开预览文件还是新文件新开一个tab
3.悬停符号是否加入历史
4.是否用右侧窗口预览还是悬停tips预览
5.是否显示cscope/ctags/readtags命令行。
命令
cscope/ctags/readtags三个命令的Windows版本和Linux版本已预置在插件中。
可以配置使用系统自带命令,