]> Cypherpunks repositories - gostls13.git/commitdiff
runtime/pprof: don't print extraneous 0 after goexit
authorIan Lance Taylor <iant@golang.org>
Wed, 13 Jul 2016 20:22:47 +0000 (13:22 -0700)
committerIan Lance Taylor <iant@golang.org>
Wed, 13 Jul 2016 21:18:19 +0000 (21:18 +0000)
This fixes erroneous handling of the more result parameter of
runtime.Frames.Next.

Fixes #16349.

Change-Id: I4f1c0263dafbb883294b31dbb8922b9d3e650200
Reviewed-on: https://go-review.googlesource.com/24911
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/runtime/pprof/pprof.go
src/runtime/pprof/pprof_test.go

index f2cd81adb1e4b39fb200b6fc6f3b406750b12e51..b7c41f13de2bc2ffa198125a2b2e8387c21d1a1b 100644 (file)
@@ -353,12 +353,9 @@ func printStackRecord(w io.Writer, stk []uintptr, allFrames bool) {
                if name == "" {
                        show = true
                        fmt.Fprintf(w, "#\t%#x\n", frame.PC)
-               } else {
+               } else if name != "runtime.goexit" && (show || !strings.HasPrefix(name, "runtime.")) {
                        // Hide runtime.goexit and any runtime functions at the beginning.
                        // This is useful mainly for allocation traces.
-                       if name == "runtime.goexit" || !show && strings.HasPrefix(name, "runtime.") {
-                               continue
-                       }
                        show = true
                        fmt.Fprintf(w, "#\t%#x\t%s+%#x\t%s:%d\n", frame.PC, name, frame.PC-frame.Entry, frame.File, frame.Line)
                }
index a6f5eda458789a84266a5d0fe0808ac1531c61ec..a0930155a51181f3bf45efbe2bdb358853d49c37 100644 (file)
@@ -497,6 +497,10 @@ func TestBlockProfile(t *testing.T) {
                t.Fatalf("Bad profile header:\n%v", prof)
        }
 
+       if strings.HasSuffix(prof, "#\t0x0\n\n") {
+               t.Errorf("Useless 0 suffix:\n%v", prof)
+       }
+
        for _, test := range tests {
                if !regexp.MustCompile(strings.Replace(test.re, "\t", "\t+", -1)).MatchString(prof) {
                        t.Fatalf("Bad %v entry, expect:\n%v\ngot:\n%v", test.name, test.re, prof)