| // Copyright 2017 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package runtime_test |
| |
| import ( |
| "fmt" |
| "runtime" |
| ) |
| |
| func ExampleFrames() { |
| c := func() { |
| pc := make([]uintptr, 5) |
| n := runtime.Callers(0, pc) |
| if n == 0 { |
| return |
| } |
| |
| frames := runtime.CallersFrames(pc[:n]) |
| var frame runtime.Frame |
| more := true |
| for more { |
| frame, more = frames.Next() |
| fmt.Printf("- more:%v | %s\n", more, frame.Function) |
| } |
| } |
| |
| b := func() { c() } |
| a := func() { b() } |
| |
| a() |
| // Output: |
| // - more:true | runtime.Callers |
| // - more:true | runtime_test.ExampleFrames.func1 |
| // - more:true | runtime_test.ExampleFrames.func2 |
| // - more:true | runtime_test.ExampleFrames.func3 |
| // - more:false | runtime_test.ExampleFrames |
| } |