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.