概述
在见识到source insight在追踪内核代码方面的强大能力后,习惯使用vscode的我顿时对source insight产生了兴趣,但随后我就发现自己还是不习惯使用source insight,于是折腾起vscode来,看看能不能借助vscode的各种插件来实现强大如source insight那样的内核代码追踪功能。
在网上查找时,发现很多人使用vscode+GNU Global的方案,但试过后发现并不好用,经常提示找不到符号的定义。最后发现一款插件能基本满足我的要求,它的功能虽然比source insight差一些,但支持跳转到定义、代码补全和鼠标悬停显示符号定义这些功能。另外,虽然这款插件和GNU Global一样都要在工程目录下生成文件以供追踪使用,但它生成文件速度也要比GNU Global快。下面是这款插件的基本介绍:
插件名称:Embeded Linux Kernel Dev(简称ELKD)
插件依赖:
软件——universal-ctags
vscode插件——DeviceTree
插件效果(跳转到定义):光标停在符号的位置,然后右击鼠标选择“转到定义”或者按F12,即可查看符号的定义或者直接跳到符号定义的所在文件中。
插件的安装配置
安装universal-ctags
参考链接:安装ctags方法
安装vscode插件DeviceTree
这个在vscode扩展市场里一搜就有, 此处就不赘述。
安装vscode插件Embeded Linux Kernel Dev
这个也是在vsocde扩展市场里一搜就有,此处也不赘述了。
配置
使用vscode打开内核源码目录,打开任意一个.c文件后,ELKD就会开始生成ctag 索引(显示在vscode的左下角,如下图):
过了会儿(具体看电脑性能),ctag 索引就会建立完毕。此时可以在源码目录下看到一个名为.vscode-ctags的文件。
接下来,我们就可以追踪内核代码,查看符号所在文件及其定义了。
更多详细内容,可在vscode中查看ELKD的说明。