1, Prerequisite: Install golang and GoLand IDE
Golang :https://golang.org/doc/install
GoLand IDE :https://www.jetbrains.com/go/learn/ (Free 30-day trial)
2, Build Project
(1) Run the following command to get go-vite source code.
go get github.com/vitelabs/go-vite
(2) When the source code download finish, you can go to the path "%GOPATH%\src\github.com\vitelabs" to check.
![微信截图_20190821192022.png](/assets/uploads/files/1566481149662-%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20190821192022.png)
(3) Run GoLand IDE and click the open-project button.
![oepnproject.png](/assets/uploads/files/1566481191358-oepnproject.png)
Choose the go-vite source code path which you just downloaded.
![pojectgovite.png](/assets/uploads/files/1566481233898-pojectgovite.png)
Then you will see the project has been opened.
![sucessful open.png](/assets/uploads/files/1566481265837-sucessful-open.png)
3, Build Project
(1) Open the Tab bar "Run" and select "Edit Configurations" function.
![build_config.png](/assets/uploads/files/1566481306155-build_config.png)
(2) Open "Templates" collapse and select "Go Build", actually you don't need to do anything to the default configuration, but you'd better make an output path for the future debug operation.
![create_output.png](/assets/uploads/files/1566481363131-create_output.png)
According to the makefile, we know the entrance of the project is the “gvite” command.
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
So we need to fill in the “gvite” path in the "Package path" option and click “Apply” to confirm it.
(3) Now let's build and run gvite.
![run_gvite.png](/assets/uploads/files/1566481410573-run_gvite.png)
Select “go build …../gvite”.
![select gvite.png](/assets/uploads/files/1566481474612-select-gvite.png)
If everything is OK, the gvite will be running success.
![sucessful run gvite.png](/assets/uploads/files/1566481496735-sucessful-run-gvite.png)
4,Debug Project
The entrance of gvite is very clearly. The best way to understand the whole project is to begin from the main function.
// gvite is the official command-line client for Vite
func main() {
govite.PrintBuildVersion()
gvite_plugins.Loading()
}
The first line of the main function is to print a version number, we can ignore it.
We set the breakpoint at gvite_plugins.Loading()
It’s too simple to make a breakpoint. You just need to click one time at the place of a code line number. If it shows a redpoint means setting is successful.
![bp gvite.png](/assets/uploads/files/1566481530432-bp-gvite.png)
Now we use Debug mode to run the project.
![debug mode.png](/assets/uploads/files/1566481547437-debug-mode.png)
You will see the program break at “gvite_plugins.Loading()” ,then you can use 4 ways to debug the program,like F8(step over),F7(step into),Shift+F8(step out),Alt+F9(run to cursor).
Due to this is the main entrance, so we use F7 to continue. Then the program will go to the following function.
func Loading() {
if err := app.Run(os.Args); err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
}
The remaining work is to do "break and run, break and run, loop and loop" continuously until you understand the logic of the program.
OK, that’s all! Maybe next time I will share some code analysis.