当前位置: 首页 > 科技观察

为什么VSCode在读取Linux代码时不会卡住?只有这样做,你才能飞得快!

时间:2023-03-15 19:37:52 科技观察

本文转载自微信公众号“奇雅云存储”,作者奇雅。转载本文请联系奇亚云存储公众号。您使用什么编辑器来编辑Linux内核代码?我分享了我对如何学习Linux内核代码的想法。当时稍微提了一下,琪雅是用vscode来读取内核代码的。对此有同学提出疑问:vscode看linux代码不会卡吗?为什么vscode符号跳转总是有问题?在windows下开发linux项目很麻烦,总是要手动同步代码?其实上面提出的三个问题,只要合理配置vscode就可以完美解决。今天就以Linux内核源码为例,分享一下超大型项目源码的源码开发和阅读姿势。思考我们遇到的问题我们经常会遇到两个问题:本地电脑有瓶颈,单机性能有限,毕竟资金紧缺?一般电脑都安装windows或者mac图形支持系统,开发项目一定要在Linux上编译运行?如果直接在本机上使用vscode,难免会遇到以上问题。比如linux代码量巨大,机器的性能hold不住。编辑器创建的内存索引非常大,既消耗内存又消耗CPU。对于编译,就更麻烦了,涉及到手动同步。我们经常是怎么解决的?垂直优化电脑,给电脑加个内存条,换个CPU。这个想法是可以的,但是总会有性能瓶颈。这真的不是钱的问题;对于平台依赖,以前的做法是在windows下编辑,然后用scp或者其他同步工具把代码同步到另外一个linux上编译,很麻烦;怎样才能彻底解决呢?奇亚最佳实践:vscode远程开发,利用多机性能;如何解决单机的瓶颈和平台依赖?解决单机瓶颈的思路很简单,就是分布式、多机部署。我的使用姿势是在本地开一个vscode,但是代码是放在远程主机上的,是功能强大速度快的linux服务器。这样做的好处是将资源消耗的压力分散到远程主机上,对本地机器的消耗很小,即使项目很大也很稳定。第二个优势是平台的无缝切换。即使你使用的是windows机器,也可以非常流畅的开发Linux项目,代码编辑,项目编译,没有任何切换感。远程主机是一台32核128GSSD盘的服务器。运行Linux源代码分析是不够的。有童鞋问了,这个服务器从哪里来?答:你不上班吗?公司的。而这种开发方式可以让你的电脑不再焦躁。把纵向优化的思路改成横向扩展后,你的瓶颈就不存在了。你的本地机器只能做一个接口。效果展示:如何配置vscode远程开发?说了这么多,接下来看看怎么实践吧。如何配置这个?下面以Linux源码为例,一步步教大家如何配置。准备Linux主机。这是我们的远程主机,那么它的性能如何呢。当然,如果只是为了跨平台,其实也可以是虚拟机。在远程主机上安装全局工具注意安装在远程主机上,是为了更好更快的分析我们的符号表。下面是ubuntu命令,其他linux系统可以查一下,比如centos是yum安装的。aptinstallglobal安装完成后,确认global和gtags这两个二进制文件通常在/usr/bin/目录下。有了这两个文件,就OK了。Linux源码下载这个可以自行从Github或者其他镜像网站下载。Github地址:https://github.com/torvalds/linux.git下载后放到远程目录:root@ubuntu20:/mnt/opensource/linux-3.10#pwd/mnt/opensource/linux-3.10vscodeInstallRemote-SSH插件既然有了host和code,那vscode怎么具备连接远程host的能力呢?vscode的远程连接主机主要依赖于微软提供的插件Remote-SSH。安装插件后,vscode就有了连接远程主机的能力。左下角有一个符号><,点击它可以选择要连接的远程主机。连接后会打开一个新窗口,左下角也会显示。顺便说一句,微软一共发布了三个远程连接插件:Remote-ContainersRemote-SSHRemote-WSL名字也很好区分,就是支持连接容器、SSH主机和WSL子系统。安装C/C++GNUGlobalPlug-in好了,一切就绪。接下来就是准备符号解析了,你就可以享受极速的源码阅读体验了。首先,我们连接到远程主机。注意:此时会重新打开一个窗口,而不是在本地安装。当然也最好安装C/C++插件。重点:一定要先连接主机,再安装GNUGlobal插件。它必须安装在远程主机上。vscode配置全局路径在vscode的配置(ssh)中,输入如下配置:在vscode的settings.json配置中,指定相关的全局路径。"gnuGlobal.globalExecutable":"/usr/bin/global","gnuGlobal.gtagsExecutable":"/usr/bin/gtags",//表示生成的符号表存放位置"gnuGlobal.objDirPrefix":"/mnt/.global”注意:“gnuGlobal.objDirPrefix”路径必须手动创建,如果不存在,后续Rebuild会失败。测试远程主机上的Gtags是否执行成功。现在插件安装完成。测试安装配置是否正确。Shift+command+P退出命令面板,执行Global:ShowGNUGlobalVersion命令,看是否能成功显示版本。如果右下角显示版本号,则万事俱备:global(GNUGLOBAL)6.6.4最后点击,生成符号表shift+command+P调出命令面板,执行Global:RebuildGtagsDatabase命令.等待右下角的通知。如果显示:Buildtagfilessuccessfully,则符号表解析完成。如果符号表生成成功,会在“gnuGlobal.objDirPrefix”路径下生成三个文件:root@ubuntu20:/mnt/opensource/linux-3.10#ll-lh/mnt/.global/mnt/opensource/linux-3.10/总计395Mdrwxr-xr-x2rootroot4.0KFeb1419:06./drwxr-xr-x3rootroot4.0KFeb1418:33../-rw-r--r--1rootroot7.6MFeb1419:06GPATH-rw-r--r--1rootroot278MFeb1419:06GRTAGS-rw-r--r--1rootroot109MFeb1419:06GTAGS好的,以上就搞定了,大家可以愉快的使用vscode查看源码了,速度很快。好了,现在你可以尽情享受Linux代码的阅读和开发了。您不仅可以享受图形界面带来的便利,还可以无缝开发Linux。并且不受本地电脑资源瓶颈的限制,拥有无限的扩展空间。综上所述,单机总有瓶颈,垂直优化总有极限,代价高昂;既有图形界面的便捷,又有Linux开发模式的无缝切换?远程开发是一种很好的体验;vscode使用插件实现远程开发,以本地电脑为接口,将符号解析放在远程主机上,真正实现横向扩展,性能理论上无限制;Linux源码解析放在远程主机上,vscode远程连接,源码阅读流畅如丝,开发体验完美;