在windows上使用GoLand对vite源码进行构建及调试
-
本文撰写者:Vite社区用户、安全技术专家晓宇先生
一、 前置条件
安装golang及GoLand IDE,以下是官方的指导,在此不再赘述。
Golang : https://golang.org/doc/install
GoLand IDE : https://www.jetbrains.com/go/learn/ (30天免费评估期)
二、建立工程
1,运行>go get github.com/vitelabs/go-vite, 并等待代码拉取。
2,代码拉取结束后进入%GOPATH%\src\github.com\vitelabs 路径下,如果前一步执行成功了就会看到vite最新的代码已经在这里下载好了。
3,运行GoLand,在主界面中选择open project
选择刚才已经完成源码下载的go-vite路径并确认。
顺利的话应该看到vite工程已经成功打开了
三、构建工程
1,打开标签栏中的Run,并且选择Edit Configurations。
2,打开Templates的折叠并选择Go Build,默认的情况下对vite编译不需要进行任何设置,只使用默认设置就好,但是为了后续调试方便,我自己定义了输出目录D:\Users\Desktop\vite_output。
根据源码中makefile的内容可知
gvite-windows-amd64: @echo "package govite" > $(shell pwd)/buildversion.go @echo "const VITE_VERSION = \""$(shell git rev-parse HEAD)"\"" >> $(shell pwd)/buildversion.go @echo "const VITE_BUILD_VERSION = \""$(VITE_VERSION)"\"" >> $(shell pwd)/buildversion.go env GOOS=windows GOARCH=amd64 go build -i -o $(GOBIN)/gvite-$(VITE_VERSION)-windows/gvite-windows-amd64.exe $(SERVERMAIN) @cp $(shell pwd)/node_config.json $(GOBIN)/gvite-$(VITE_VERSION)-windows/node_config.json @echo "Build server done."ls @ls -ld $(GOBIN)/gvite-$(VITE_VERSION)-windows/gvite-windows-amd64.exe
项目的主要入口就是在gvite这个命令上,所以我们在Package path中选择cmd目录中的gvite路径,完毕后点击Apply和OK,使设置生效。
3,接下来就要开始编译并运行gvite了,在主界面的选项卡run中点击run,让工程开始编译并执行。
选择刚刚配置好的build选项开始编译。
如果一切顺利的话,gvite就应该成功运行起来了。
#四、调试工程gvite的主程序入口非常清爽,我们想了解整个vite工程庞大的脉络从入口这里进入是最好的开始。Main函数代码第一句就是显示一下版本号,这句可以忽略,我们把断点打在gvite_plugins.Loading()这句上。
// gvite is the official command-line client for Vite func main() { govite.PrintBuildVersion() gvite_plugins.Loading() }
打断点很简单,只需要用鼠标在代码行数的位置点击一下,出现红点后就代表已经下断成功了。
然后使用debug模式启动gvite。
debug模式运行后会直接断在gvite_plugins.Loading()这里。接下来就是调试的4个基本运行方式了,分别对应快捷键是F8(步过)、F7(步入)、Shift+F8(步出)、Alt+F9(运行到此处)。
由于这里是总入口,所以我们选择步入,看看程序会最先走到哪里。执行F7过后,程序走到了加载插件的函数中。
func Loading() { if err := app.Run(os.Args); err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } }
余下的工作就是反复的对我们感兴趣的模块和功能进行下断,运行,下断,运行,直到我们摸清楚了程序的运行逻辑。
OK,今天就先介绍到这里,后续我会分享一些VITE源码的分析结果给大家,谢谢!
Suggested Topics
-
Vite安全算法相关技术选型
技术讨论 • • 双眼皮 -
建议官方多在技术上发出声音
技术讨论 • • 巴山夜雨