赞
踩
原文链接:https://blog.csdn.net/u010252464/article/details/116332878
在见识到source insight在追踪内核代码方面的强大能力后,习惯使用vscode的我顿时对source insight产生了兴趣,但随后我就发现自己还是不习惯使用source insight,于是折腾起vscode来,看看能不能借助vscode的各种插件来实现强大如source insight那样的内核代码追踪功能。
在网上查找时,发现很多人使用vscode+GNU Global的方案,但试过后发现并不好用,经常提示找不到符号的定义。最后发现一款插件能基本满足我的要求,它的功能虽然比source insight差一些,但支持跳转到定义、代码补全和鼠标悬停显示符号定义这些功能。另外,虽然这款插件和GNU Global一样都要在工程目录下生成文件以供追踪使用,但它生成文件速度也要比GNU Global快。下面是这款插件的基本介绍:
插件依赖:
软件——universal-ctags
vscode插件——DeviceTree
插件效果(跳转到定义):光标停在符号的位置,然后右击鼠标选择“转到定义”或者按F12,即可查看符号的定义或者直接跳到符号定义的所在文件中。
参考链接:安装ctags方法
这个在vscode扩展市场里一搜就有, 此处就不赘述。
安装vscode插件Embeded Linux Kernel Dev
这个也是在vsocde扩展市场里一搜就有,此处也不赘述了。
使用vscode打开内核源码目录,打开任意一个.c文件后,ELKD就会开始生成ctag 索引(显示在vscode的左下角,如下图):
过了会儿(具体看电脑性能),ctag 索引就会建立完毕。此时可以在源码目录下看到一个名为.vscode-ctags的文件。
接下来,我们就可以追踪内核代码,查看符号所在文件及其定义了。
更多详细内容,可在vscode中查看ELKD的说明。
1、隐藏多余的文件
.vscode/settings.json 修改如下:
{ "search.exclude": { "**/node_modules": true, "**/bower_components": true, "**/*.o":true, "**/*.su":true, "**/*.cmd":true, "Documentation":true, /* 屏蔽不用的架构相关的文件 */ "arch/alpha":true, "arch/arc":true, "arch/arm64":true, "arch/avr32":true, "arch/[b-z]*":true, "arch/arm/plat*":true, "arch/arm/mach-[a-h]*":true, "arch/arm/mach-[n-z]*":true, "arch/arm/mach-i[n-z]*":true, "arch/arm/mach-m[e-v]*":true, "arch/arm/mach-k*":true, "arch/arm/mach-l*":true, /* 屏蔽排除不用的配置文件 */ "arch/arm/configs/[a-h]*":true, "arch/arm/configs/[j-z]*":true, "arch/arm/configs/imo*":true, "arch/arm/configs/in*":true, "arch/arm/configs/io*":true, "arch/arm/configs/ix*":true, /* 屏蔽掉不用的DTB文件 */ "arch/arm/boot/dts/[a-h]*":true, "arch/arm/boot/dts/[k-z]*":true, "arch/arm/boot/dts/in*":true, "arch/arm/boot/dts/imx1*":true, "arch/arm/boot/dts/imx7*":true, "arch/arm/boot/dts/imx2*":true, "arch/arm/boot/dts/imx3*":true, "arch/arm/boot/dts/imx5*":true, "arch/arm/boot/dts/imx6d*":true, "arch/arm/boot/dts/imx6q*":true, "arch/arm/boot/dts/imx6s*":true, "arch/arm/boot/dts/imx6ull-9x9*":true, "arch/arm/boot/dts/imx6ull-14x14-ddr*":true, "arch/arm/boot/dts/*.tmp":true, }, "files.exclude": { "**/.git": true, "**/.svn": true, "**/.hg": true, "**/CVS": true, "**/.DS_Store": true, "**/*.o":true, "**/*.su":true, "**/*.cmd":true, "Documentation":true, /* 屏蔽不用的架构相关的文件 */ "arch/alpha":true, "arch/arc":true, "arch/arm64":true, "arch/avr32":true, "arch/[b-z]*":true, "arch/arm/plat*":true, "arch/arm/mach-[a-h]*":true, "arch/arm/mach-[n-z]*":true, "arch/arm/mach-i[n-z]*":true, "arch/arm/mach-m[e-v]*":true, "arch/arm/mach-k*":true, "arch/arm/mach-l*":true, /* 屏蔽排除不用的配置文件 */ "arch/arm/configs/[a-h]*":true, "arch/arm/configs/[j-z]*":true, "arch/arm/configs/imo*":true, "arch/arm/configs/in*":true, "arch/arm/configs/io*":true, "arch/arm/configs/ix*":true, /* 屏蔽掉不用的DTB文件 */ "arch/arm/boot/dts/[a-h]*":true, "arch/arm/boot/dts/[k-z]*":true, "arch/arm/boot/dts/in*":true, "arch/arm/boot/dts/imx1*":true, "arch/arm/boot/dts/imx7*":true, "arch/arm/boot/dts/imx2*":true, "arch/arm/boot/dts/imx3*":true, "arch/arm/boot/dts/imx5*":true, "arch/arm/boot/dts/imx6d*":true, "arch/arm/boot/dts/imx6q*":true, "arch/arm/boot/dts/imx6s*":true, "arch/arm/boot/dts/imx6ull-9x9*":true, "arch/arm/boot/dts/imx6ull-14x14-ddr*":true, "arch/arm/boot/dts/*.tmp":true, } }
https://www.cnblogs.com/zjutzz/p/9393397.html
ctags可以用于在vim中的函数定义跳转。在ubuntu16.04下默认提供的ctags是很老很旧的ctags,快要发霉的版本(5.9~svn20110310-11),快扔掉它,安装universal-ctags吧!
universal-ctags是什么?A maintained ctags implementation, https://ctags.io,一个负责的ctags实现,在github上开源并且持续更新和维护。
不多说,快点安装吧:
sudo apt install autoconf
cd /tmp
git clone https://github.com/universal-ctags/ctags
cd ctags
./autogen.sh
./configure --prefix=/opt/software/universal-ctags # 我的安装路径。你按自己的情况调整。
make -j8
sudo make install
把ctags可执行文件更新到系统PATH上?No,我选择创建链接的方式:
# 如果你装了emacs-snapshot,那么现在的ctags命令实际上链接到了/usr/bin/ctags-snapshot,要先删除链接文件:
# sudo rm /usr/bin/ctags
# 然后,把新编译安装的universal-ctags链接过来:
sudo ln -s /opt/software/universal-ctags/bin/ctags /usr/bin/ctags
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。