vscode源码分析,vscode怎么看源码
vscode 插件可视化制作和管理脚手架及原理解析
提到脚手架,大家想到的可能就是各种 xxx-cli,本文介绍的是另一种方式:以 vscode 插件的形式实现,提供 web 可视化操作,如下图:
下面介绍如何安装使用,以及实现原理。
vscode 安装 lowcode 插件,此插件是一个效率工具,脚手架只是其中一个功能,更多功能可以查看 文档 ,这集只讲脚手架相关的。
插件安装之后,打开脚手架界面,步骤如下图:
可以直接使用分享的脚手架,勾选选项后直接创建即可:
在模板项目根目录下创建 lowcode.scaffold.config.json 文件,将需要做内容动态替换的文件加上 .ejs 后缀。
ejs 语法
一个完整 lowcode.scaffold.config.json 配置:
formSchema :
formSchema.schema 为 x-render 表单设计器 导出的的 schema,会根据 schema 构建出表单界面, formSchema.formData 为表单默认数据
创建项目的时候会将表单数据传入 ejs 模板中进行编译。
excludeCompile :配置不需要经过 ejs 编译的文件夹或文件。
conditionFiles :根据表单项的值,在创建项目的时候将某些文件夹或文件删除,比如:
当 lint 这个表单项的值为 false 的时候,配置的文件夹或文件 ".eslintrc.js",".prettierrc.js",将会在创建的项目中排除掉。
将脚手架提交到 git 仓库,注意开放项目的公开访问权限。
修改 仓库 中 index.json 内容,提交 pr。
下集再说插件其他功能,插件源码:
vscode + gdb 远程调试 linux 内核源码(附视频)
配套视频: vscode + gdb 远程调试 linux (EPOLL) 内核源码 。
前段时间才搭建起来 gdb 调试 Linux 内核网络源码 ( 视频 ),但是 gdb 命令调试效率不高。磨刀不误砍柴工,所以折腾一下 vscode ,使调试人性化一点。
要搭建 vscode + gdb 调试 Linux 内核环境,首选要搭建: gdb 调试 Linux 内核源码 ( 视频 ) ,然后再配置 vscode 进行测试调试。
如何配置vscode的python编译环境
为VSCode安装扩展
用VSCode编程是需要依赖扩展的。写Python需要安装python的扩展,写C++需要安装C++的扩展。刚打开编辑器的时候,它一般会推荐一些扩展,你如果什么都不知道,可以先安装官方推荐的这些扩展:
修改VSCode的一些选项的默认值
VSCode有很多选项可以被修改,其各个选项都有默认值,这些默认值存储在"\settings.json"中(不过我没找到这个文件),用户如果想修改某些选项的值(比如:修改字体的大小),VSCode会自动帮我们生成一个“settings.json”文件,然后我们直接在这个文件中配置自己想要的值即可。
VSCode还没有创建"settings.json"文件:
VSCode帮我们创建了"settings.json"文件:
我们修改字号,让字体大一些。修改完后,保存一下,自定义的值就会覆盖默认值,修改就生效了。
用VSCode编写和调试python程序
下面就开始用VSCode编程了。因为python的配置超简单,我们以python为例来说明一下。
https //segmentfault com/q/1010000005897116
VSCode是以文件夹作为项目单位的。所以,我们如果要新建一个python项目的话,需要新建一个文件夹,然后在这个文件夹里面放置.py文件。然后让VSCode"打开文件夹",这样VSCode就能识别这个项目了。(当然可以用VSCode直接创建文件夹和文件。)
先创建test_python文件夹,里面创建一个test.py文件。
然后用VSCode加载它:
加载后的样子。可以看到,因为安装了python扩展,已经有高亮等效果了。
下面开始调试。
很显然要选择python选项:
然后VSCode为我们自动生成了"launch.json"文件,此文件有很多配置项,有的选项是默认从"settings.json"中取值的(比如"config.python.pythonPath")。如果"settings.json"中没有配置它们的话,调试时可能会无法启动。
同时,项目文件夹下面还自动生成了".vscode"文件夹。文件"launch.json"就在这个文件夹中。此时VSCode才算是真正意义上接手了这个项目文件夹。
网上的教程里,直接先在"settings.json"中把"python.pythonPath"先配置了一下,我当时不是太理解。现在看来,我们也需要配置一下了。
配置完之后,就可以正常调试程序了。
用VSCode调试带参的Python程序
修改test.py里面的代码,让它能打印参数(修改后的代码见下面的图片)。
修改launch.json,找到"configurations"中"name"为"Python"的那个配置块,给它添加"args"项,如下图所示:
添加前的配置块:
添加后的配置块:
文件launch.json修改完毕后,按F5调试程序,可以看到控制台输出的结果:
在按F5调试时,VSCode每次都会在程序入口处暂停住,这是配置项"stopOnEntry"在起作用,将其改成false后就不会出现这种情况了。
用VSCode自动格式化代码
VSCode“自动格式化代码”的快捷键是“Alt+Shift+F”。要格式化Python代码,需要安装Python包yapf(或autopep8、等)。
在命令行下执行:
[plain] view plain copy
python -m pip install yapf
然后配置"settings.json",启用yapf:
用VSCode对python代码进行语言分析
VSCode使用python的语言分析(写python代码的时候,编辑器会提示哪里出错,哪里的代码格式不规范),可以安装flake8(或pylint、等):
在命令行下执行:
[plain] view plain copy
python -m pip install flake8
然后配置"settings.json",启用flake8:
更换文件图标主题(使VSCode左侧的资源管理器根据文件类型显示图标):
可以选择已经存在的文件图标主题:"文件"-"首选项"-"文件图标主题"-"Seti(Visual Studio Code)"。
你也可以安装“vscode-icons”插件,安装的方式:
在“扩展(Ctrl+Shift+X)”中,搜索“vscode-icons”,然后安装并重新加载它,然后VSCode会让你执行一些操作,以激活"vscode-icons"插件。操作为:
"文件"-"首选项"-"文件图标主题"-"VSCode Icons"。对应到英文的话,应该是"File" - "Preferences" - "File Icon Theme"-"VSCode Icons"。
Guides(缩进线插件,让代码看起来更清晰):
在“扩展(Ctrl+Shift+X)”中,搜索“Guides”,然后安装并重新加载它即可。
vscode源码打包
1.打包方法: yarn run gulp vscode-win32-x64-archive,打包后生成的包在 .build\win32-x64\archive\VSCode-win32-x64.zip , 这种方法目前看似乎是从某个文件夹直接压缩。在这个之前,需要先做 yarn的动作。
2.另一种方法: yarn run gulp vscode-win32-x64-min, 打包后,会在 vscode 当前目录的上一级生成目录VSCode-win32-x64,带 min 和不带 min 的编译方法相比,min对于其中的js文件做过体积简化。我们编译应该用带min的方式来编译。
[openharmony]liteos-a编译过程分析
最近搞一个sensor接入openharmony的事情,在分析源码中的加速度计驱动相关源码时,发现不紧有BUILD.gn文件,还有Makefile文件,并且里面都有记录源文件路径。所以很困惑,openharmony是通过gn+ninja编译的还是通过make编译的?
为了搞清楚,所以针对liteos-a系统下的编译过程进行分析,在这里记录一下
通过官方文档看,liteos-a系统编译时用的是官方的hb命令 hb set 和 hb build 命令,所以入口肯定是hb工具
查看openharmony源码中build目录下有一个lite/hb目录(hb命令的源码目录,使用python脚本)
看鸿蒙研究站里面有一篇介绍hb命令的调试方法,通过vscode+python插件调试,参见 《v59.xx 鸿蒙内核源码分析(构建工具篇) | 顺瓜摸藤调试鸿蒙构建过程》
设置好之后就可以开始在vscode上调试
这个是整个编译的重点,通过调试可以看到最终是调用了gn/ninja/fs_make,如下分析
这个就是整体的编译过程了,先调用gn生成ninja文件,再通过ninja进行编译,最后通过fs_make制作镜像
因为内容太多,下面对这三个编译动作先做个整体的介绍,后续再对每一个进行详细分析
继续调试,会先进入 gn_build 接口,看实现就是调用了 gn gen 命令,如下
查看gn_cmd变量,详细命令为(比较多,经过了整理):
这个命令之后,就会将工程中所有用到的 BUILD.gn 文件转换成 module_name.ninja 文件(类似 makefile )供后面 ninja 命令(类似 make )调用并进行编译
再继续调试就会进入 ninja_build 接口,实现以及执行的详细的 ninja 命令如下
这个命令与 make 命令类似,但是注重速度(详细信息可以在网上搜索两者区别);此命令执行即是通过build.ninja/toolchain.ninja/各BUILD.gn转换的.ninja来进行编译,并生成.bin/.so/.a等文件
整个编译OK之后会输出如下图中成功信息
在out目录下就会生成烧录用到的镜像文件,如下图
delve基础用法及在vscode中的使用
delve 是go语言的调试器,delve的目标是为go提供一个简洁、功能齐全的debug工具,delve易于调用和使用。
为了能够编译delve,需要安装Go 1.10或更高版本
安装好go后,直接go get即可安装,更多安装教程见:
go get github.com/go-delve/delve/cmd/dlv
安装好后,在终端执行dlv或者dlv help 会看到dlv的帮助信息,则说明安装成功
dlv常用命令
delve的目标是成为一个简洁而强大的工具。但如果你不习惯在编译语言中使用源码调试,则可能令人困惑。本文档将提供开始调试go程序所需的全部信息。
调试例子程序如下
├── go.mod
├── go.sum
├── main.go
├── test
└── utils
├── util.go
└── util_test.go
调试程序主要有三个文件,main.go、util.go、util_test.go,内容如下,比较简单,go包管理工具使用的是go module,模块名为test
在vscode debug 的设置中配置launch.json文件
mode 设置为debug时,program的内容${fileDirname}即可,mode 设置为exec时,program的值为二进制文件的路径,通过设置mode的值,即可调试源码和二进制程序(也需要有源码)。mode模式为auto时,测试了下,vscode 并不能通过program的内容来判断是debug还是exec
远程调试时,需要在远程也有源码、二进制包和dlv工具
在远端执行dlv命令
dlv debug --headless --listen=:8989 --api-version=2 --accept-multiclient #用degbug方式启动远程应用程序
dlv exec --headless --listen=:8989 ./test --api-version=2 --accept-multiclient # exec执行当前目录下的test二进制文件
--listen:指定调试端口
--api-version:指定api版本,默认是1
--accept-multiclient:接受多个client调试
在vscode中线下好源码,和远端的源码结构一致。launch.json配置如下:
在vscode中打好断点后,就可以进行远程调试了