1
0
mirror of https://github.com/golang/go synced 2024-09-25 15:20:13 -06:00

cmd/pprof: handle empty profile gracefully

The command "go tool pprof -top $GOROOT/bin/go /dev/null" now logs that
profile is empty instead of panicking.

Fixes #9207

Change-Id: I3d55c179277cb19ad52c8f24f1aca85db53ee08d
Reviewed-on: https://go-review.googlesource.com/2571
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
Håvard Haugen 2015-01-09 00:11:44 +01:00 committed by Brad Fitzpatrick
parent 02e69c4b53
commit 14a4649fe2
3 changed files with 33 additions and 0 deletions

View File

@ -1013,6 +1013,10 @@ func generate(interactive bool, prof *profile.Profile, obj plugin.ObjTool, ui pl
w = outputFile
}
if prof.Empty() {
return fmt.Errorf("profile is empty")
}
value, stype, unit := sampleFormat(prof, f)
o.SampleType = stype
rpt := report.New(prof, *o, value, unit)

View File

@ -565,3 +565,8 @@ func (p *Profile) Demangle(d Demangler) error {
}
return nil
}
// Empty returns true if the profile contains no samples.
func (p *Profile) Empty() bool {
return len(p.Sample) == 0
}

View File

@ -0,0 +1,24 @@
// Copyright 2015 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 profile
import (
"bytes"
"testing"
)
func TestEmptyProfile(t *testing.T) {
var buf bytes.Buffer
p, err := Parse(&buf)
if err != nil {
t.Error("Want no error, got", err)
}
if p == nil {
t.Fatal("Want a valid profile, got <nil>")
}
if !p.Empty() {
t.Errorf("Profile should be empty, got %#v", p)
}
}