码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • go: play with so source code. Go源代码编译和调试


    工具

    vscode

    clone仓库

    git clone https://github.com/golang/go
    cd golang/go
    
    • 1
    • 2

    编译go

    编译的主要入口是src/make.bash(windows则是src/make.bat):

    # src/make.bash
    
    # GOROOT_FINAL: The expected final Go root, baked into binaries.
    # The default is the location of the Go tree during the build.
    #
    # GOROOT_BOOTSTRAP: A working Go tree >= Go 1.4 for bootstrap.
    # If $GOROOT_BOOTSTRAP/bin/go is missing, $(go env GOROOT) is
    # tried for all "go" in $PATH. $HOME/go1.4 by default.
    if [ ! -f run.bash ]; then
    	echo 'make.bash must be run from $GOROOT/src' 1>&2
    	exit 1
    fi
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    有两个环境变量值得注意:

    • GOROOT_FINAL 最终输出的编译的go的目录
    • GOROOT_BOOTSTRAP 用于编译go的基础go版本,必须>=go1.4

    必须在src目录运行make.bash。

    cd src
    rm -rf build_go && mkdir -p build_go
    GOROOT_FINAL=build_go ./make.bash
    
    • 1
    • 2
    • 3

    日志:

    Building Go cmd/dist using /Users/xhd2015/installed/go1.17. (go1.17.5 darwin/amd64)
    Building Go toolchain1 using /Users/xhd2015/installed/go1.17.
    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 darwin/amd64.
    ---
    Installed Go for darwin/amd64 in /Users/xhd2015/Projects/gopath/src/github.com/golang/go
    Installed commands in /Users/xhd2015/Projects/gopath/src/github.com/golang/go/bin
    
    The binaries expect /Users/xhd2015/Projects/gopath/src/github.com/golang/go to be copied or moved to build_go
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    运行编译完成的go;

    $ GOROOT=$PWD bin/go version
    go version devel go1.19-416c953960 Sun Jun 26 00:26:59 2022 +0000 darwin/amd64
    
    • 1
    • 2

    误区1: 直接调试 src/cmd/go

    虽然src/cmd/go能够编译成go,但是如果直接使用系统的工具编译:

    cd src/cmd
    go build -o cmd_go ./go
    ./cmd_go # 这里实际是以系统的源码进行编译的
    
    • 1
    • 2
    • 3

    必须使用src/make.bash才能编译出当前目录的go。

    调试src/cmd/go

    GOROOT=../.. ../../bin/go build -gcflags=all="-N -l" -o /tmp/go/cmd/cmd_go.bin ./go
    
    • 1

    在这里插入图片描述

    IDE

    vscode需要设置go.goroot:

      "go.goroot": "/Users/xhd2015/Projects/gopath/src/github.com/golang/go",
    
    • 1

    并重启。这样才能解析到对应的符号。

  • 相关阅读:
    m认知无线电网络中频谱感知的按需路由算法matlab仿真
    Jmeter——循环控制器中实现Counter计数器的次数重置
    港科夜闻|香港科大计划建立北部都会区卫星校园完善"科大创新带",发展未来创新科技 未来医药发展及跨学科教育...
    助力教育信创快速发展,统信软件与山东四所高校建立信创应用重点实验室
    十二、虚拟 DOM 和 render() 函数(2)
    单链表经典OJ题:合并有序链表
    Swift数组copy-on-write特性实例
    2022年高教社杯全国大学生数学建模竞赛-A题:波浪能最大输出功率设计(附MATLAB代码)
    复杂网络建模(一)
    怎么禁止用户点击f12查看数据,查看网页代码
  • 原文地址:https://blog.csdn.net/xhdxhdxhd/article/details/125468847
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号