]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: add Frames example
authorJosh Bleecher Snyder <josharian@gmail.com>
Sat, 11 Feb 2017 22:56:16 +0000 (14:56 -0800)
committerJosh Bleecher Snyder <josharian@gmail.com>
Mon, 13 Feb 2017 06:10:35 +0000 (06:10 +0000)
Based on sample code from iant.

Fixes #18788.

Change-Id: I6bb33ed05af2538fbde42ddcac629280ef7c00a6
Reviewed-on: https://go-review.googlesource.com/36892
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/runtime/example_test.go [new file with mode: 0644]

diff --git a/src/runtime/example_test.go b/src/runtime/example_test.go
new file mode 100644 (file)
index 0000000..f817b59
--- /dev/null
@@ -0,0 +1,39 @@
+// 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
+}