mirror of
https://github.com/golang/go
synced 2024-11-23 05:40:04 -07:00
cmd/go: add GODEBUG tokens for debugging lazy module loading
GODEBUG=lazymod=log causes the go command to log a stack dump whenever the full module graph is loaded in a lazy module. GODEBUG=lazymod=strict does the same, but also terminates the command with a nonzero exit code. For #36460 Change-Id: Ia5a4c46069044bcc157b285f64c2392990d70bd0 Reviewed-on: https://go-review.googlesource.com/c/go/+/315411 Trust: Bryan C. Mills <bcmills@google.com> Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Michael Matloob <matloob@golang.org>
This commit is contained in:
parent
eb71887b99
commit
cbff713e68
@ -11,8 +11,10 @@ import (
|
||||
"cmd/go/internal/par"
|
||||
"context"
|
||||
"fmt"
|
||||
"os"
|
||||
"reflect"
|
||||
"runtime"
|
||||
"runtime/debug"
|
||||
"strings"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
@ -232,12 +234,29 @@ type summaryError struct {
|
||||
err error
|
||||
}
|
||||
|
||||
var readModGraphDebugOnce sync.Once
|
||||
|
||||
// readModGraph reads and returns the module dependency graph starting at the
|
||||
// given roots.
|
||||
//
|
||||
// Unlike LoadModGraph, readModGraph does not attempt to diagnose or update
|
||||
// inconsistent roots.
|
||||
func readModGraph(ctx context.Context, depth modDepth, roots []module.Version) (*ModuleGraph, error) {
|
||||
if depth == lazy {
|
||||
readModGraphDebugOnce.Do(func() {
|
||||
for _, f := range strings.Split(os.Getenv("GODEBUG"), ",") {
|
||||
switch f {
|
||||
case "lazymod=log":
|
||||
debug.PrintStack()
|
||||
fmt.Fprintf(os.Stderr, "go: read full module graph.\n")
|
||||
case "lazymod=strict":
|
||||
debug.PrintStack()
|
||||
base.Fatalf("go: read full module graph (forbidden by GODEBUG=lazymod=strict).")
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
var (
|
||||
mu sync.Mutex // guards mg.g and hasError during loading
|
||||
hasError bool
|
||||
|
Loading…
Reference in New Issue
Block a user