Go语言程序初始化过程
2021.07

4 Go语言程序初始化过程

作为下一章goroutine调度的一个前序,本章先讲一些基础内容,看一看Go语言编写的程序的初始化过程。其实初始化过程中会做很多很多的事情,这里忽略大部分细节,只看一下脉络。从程序入口开始分析也是学习源代码的一个好方式。

首先,写一个hello world文件,内容如下:

    package main
    import "fmt"
    func main() {
         fmt.Println("hello world!")
    }

编译,使用gdb调试。给下列函数下断点:

_rt0_amd64_darwin
main
_rt0_amd64
runtime.check
runtime.args
runtime.osinit
runtime.hashinit
runtime.schedinit
runtime.newproc
runtime.mstart
main.main
runtime.exit

你可能需要根据自己的系统将rt0amd64_darwin改成rt0amd64_linux或者别的。在gdb中先点r,回车,然后点c,回车,接着一路回车。

别着急,只是让你有一个直观的感受一下Go程序从系统初始化直到退出必经的流程。下面让我们正式开始吧!