mirror of
https://github.com/golang/go
synced 2024-11-23 10:50:09 -07: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:
parent
02e69c4b53
commit
14a4649fe2
@ -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)
|
||||
|
@ -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
|
||||
}
|
||||
|
24
src/cmd/pprof/internal/profile/profile_test.go
Normal file
24
src/cmd/pprof/internal/profile/profile_test.go
Normal 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)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user