CmdName string // "build", "install", "list", "mod tidy", etc.
- DebugActiongraph string // -debug-actiongraph flag (undocumented, unstable)
- DebugTrace string // -debug-trace flag
+ DebugActiongraph string // -debug-actiongraph flag (undocumented, unstable)
+ DebugTrace string // -debug-trace flag
+ DebugRuntimeTrace string // -debug-runtime-trace flag (undocumented, unstable)
// GoPathError is set when GOPATH is not set. it contains an
// explanation why GOPATH is unset.
// Undocumented, unstable debugging flags.
cmd.Flag.StringVar(&cfg.DebugActiongraph, "debug-actiongraph", "", "")
cmd.Flag.StringVar(&cfg.DebugTrace, "debug-trace", "", "")
+ cmd.Flag.StringVar(&cfg.DebugRuntimeTrace, "debug-runtime-trace", "", "")
}
// AddCoverFlags adds coverage-related flags to "cmd". If the
"os"
"path/filepath"
"runtime"
+ rtrace "runtime/trace"
"strings"
"cmd/go/internal/base"
cmd.Flag.Parse(args[1:])
args = cmd.Flag.Args()
}
+
+ if cfg.DebugRuntimeTrace != "" {
+ f, err := os.Create(cfg.DebugRuntimeTrace)
+ if err != nil {
+ base.Fatalf("creating trace file: %v", err)
+ }
+ if err := rtrace.Start(f); err != nil {
+ base.Fatalf("starting event trace: %v", err)
+ }
+ defer func() {
+ rtrace.Stop()
+ }()
+ }
+
ctx := maybeStartTrace(context.Background())
ctx, span := trace.StartSpan(ctx, fmt.Sprint("Running ", cmd.Name(), " command"))
cmd.Run(ctx, cmd, args)