version: 1.10

package trace

import "runtime/trace"

Overview

Package trace contains facilities for programs to generate trace for Go execution tracer.

The execution trace captures a wide range of execution events such as goroutine creation/blocking/unblocking, syscall enter/exit/block, GC-related events, changes of heap size, processor start/stop, etc. A precise nanosecond-precision timestamp and a stack trace is captured for most events. The generated trace can be interpreted using go tool trace.

Tracing a Go program

Support for tracing tests and benchmarks built with the standard testing package is built into go test. For example, the following command runs the test in the current directory and writes the trace file (trace.out).

  1. go test -trace=test.out

This runtime/trace package provides APIs to add equivalent tracing support to a standalone program. See the Example that demonstrates how to use this API to enable tracing.

There is also a standard HTTP interface to profiling data. Adding the following line will install handlers under the /debug/pprof/trace URL to download live profiles:

  1. import _ "net/http/pprof"

See the net/http/pprof package for more details.

Example:

  1. package trace_test
  2. import (
  3. "fmt"
  4. "log"
  5. "os"
  6. "runtime/trace"
  7. )
  8. // Example demonstrates the use of the trace package to trace
  9. // the execution of a Go program. The trace output will be
  10. // written to the file trace.out
  11. func Example() {
  12. f, err := os.Create("trace.out")
  13. if err != nil {
  14. log.Fatalf("failed to create trace output file: %v", err)
  15. }
  16. defer func() {
  17. if err := f.Close(); err != nil {
  18. log.Fatalf("failed to close trace file: %v", err)
  19. }
  20. }()
  21. if err := trace.Start(f); err != nil {
  22. log.Fatalf("failed to start trace: %v", err)
  23. }
  24. defer trace.Stop()
  25. // your program here
  26. RunMyProgram()
  27. }
  28. func RunMyProgram() {
  29. fmt.Printf("this function will be traced")
  30. }

Index

Examples

Package files

trace.go

func Start

  1. func Start(w io.Writer) error

Start enables tracing for the current program. While tracing, the trace will be buffered and written to w. Start returns an error if tracing is already enabled.

func Stop

  1. func Stop()

Stop stops the current tracing, if any. Stop only returns after all the writes for the trace have completed.