如何调试Go语言自身的源码运行Go语言自身的源码报错

作为一名Gopher,可能都很想从源码级别去熟悉了解Go,但对于初学者,这可能有点障碍,因为go源码打开后,不能使用go run运行代码也不能进行调试,本文就是为了打破这个障碍,扫清我们学习Go自身源码的挡路石。

准备

  1. 克隆Go源码

    jagitch@34c4dd4d4a3e:opensource$ git clone https://github.com/golang/go.git
    Cloning into 'go'...
    remote: Enumerating objects: 615933, done.
    remote: Counting objects: 100% (22992/22992), done.
    remote: Compressing objects: 100% (846/846), done.
    remote: Total 615933 (delta 22421), reused 22171 (delta 22146), pack-reused 592941
    Receiving objects: 100% (615933/615933), 343.05 MiB | 1.33 MiB/s, done.
    Resolving deltas: 100% (489881/489881), done.
    Updating files: 100% (13308/13308), done.
    

    如果github克隆很慢或存在网络问题,请参考github无法访问克隆不了项目下载失败没反映的解决方法

  2. 如果vscode没有安装Go扩展,请安装

问题

如果不进行任何配置,打开Go源码项目后很多代码会爆红,调试时也会报错,如果安装的go版本低于Go源码也会出现问题。

在这里插入图片描述

解决方法:

  1. 切换git仓库到需要调试的go版本,此处以go1.22.3版本为例,go的版本可以通过git tag查看

    jagitch@34c4dd4d4a3e:go$ git checkout -b go1.22.3.study go1.22.3
    Switched to a new branch 'go1.22.3.study'
    
    jagitch@34c4dd4d4a3e:go$ git branch
    * go1.22.3.study
      master
    
  2. 进入到go源码的src目录

    jagitch@34c4dd4d4a3e:go$ cd src
    
  3. 执行make.bash,从源码构建go1.22.3

    jagitch@34c4dd4d4a3e:src$ . ./make.bash
    Building Go cmd/dist using /usr/local/go. (go1.22.2 linux/amd64)
    Building Go toolchain1 using /usr/local/go.
    Building Go bootstrap cmd/go (go_bootstrap) using Go toolchain1.
    Building Go toolchain2 using go_bootstrap and Go toolchain1.
    Building Go toolchain3 using go_bootstrap and Go toolchain2.
    Building packages and commands for linux/amd64.
    ---
    Installed Go for linux/amd64 in /home/coder/workspace/opensource/go
    Installed commands in /home/coder/workspace/opensource/go/bin
    *** You need to add /home/coder/workspace/opensource/go/bin to your PATH.
    
  4. 查看go路径和版本

    jagitch@34c4dd4d4a3e:src$ which go
    /home/coder/workspace/opensource/go/bin/go
    jagitch@34c4dd4d4a3e:src$ go version
    go version go1.22.3 linux/amd64
    

    此时已编译好指定的go1.22.3这个版本了

  5. 在vscode中打开项目,然后打开命令面板,输入go choose 搜索然后点击Go: Choose Go Environment

    在这里插入图片描述

    选择当前Go源码目录下编译的go可执行程序,如果没有,则关闭vscode,重新打开vscode。
    在这里插入图片描述

  6. 到目前为止,就已经可以运行和调试go源码,这里以src/cmd/compile/main.go为例进行演示

    在这里插入图片描述

  7. 直接运行main.go

    jagitch@34c4dd4d4a3e:go$ cd src/cmd/compile/
    
    jagitch@34c4dd4d4a3e:compile$ go run main.go -V
    I'm debugging with the source code of go
    main version go1.22.3
    
    jagitch@34c4dd4d4a3e:compile$ which go
    /home/coder/workspace/opensource/go/bin/go
    
  8. 如果需要全局使用此次编译的go版本,则将它配置到PATH环境变量中即可(配置到~/.bashrc)

    jagitch@34c4dd4d4a3e:compile$ echo 'export /home/coder/workspace/opensource/go/bin' >> ~/.bashrc
    
    jagitch@34c4dd4d4a3e:compile$ source ~/.bashrc
    
  9. 如果是用于学习Go源码,建议搭建浏览器版的vscode,这样就可以使用手机和平板打开浏览器随时浏览Go语言,并且拥有vscode中所有功能,可以转到代码定义,可以进行调试,很方便。可以参考搭建Golang在线开发环境(随时随地码代码)

推荐阅读

1. github无法访问克隆不了项目下载失败没反映的解决方法
2. Vs code调试Go程序时怎样查看CPU寄存器的值
3. 搭建Golang在线开发环境(随时随地码代码)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gopyer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值