aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/vendor/github.com/google/pprof/internal/driver/interactive.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/vendor/github.com/google/pprof/internal/driver/interactive.go')
-rw-r--r--src/cmd/vendor/github.com/google/pprof/internal/driver/interactive.go23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/interactive.go b/src/cmd/vendor/github.com/google/pprof/internal/driver/interactive.go
index 2c36b64cc7..b893697b62 100644
--- a/src/cmd/vendor/github.com/google/pprof/internal/driver/interactive.go
+++ b/src/cmd/vendor/github.com/google/pprof/internal/driver/interactive.go
@@ -42,6 +42,9 @@ func interactive(p *profile.Profile, o *plugin.Options) error {
interactiveMode = true
shortcuts := profileShortcuts(p)
+ // Get all groups in pprofVariables to allow for clearer error messages.
+ groups := groupOptions(pprofVariables)
+
greetings(p, o.UI)
for {
input, err := o.UI.ReadLine("(pprof) ")
@@ -87,6 +90,9 @@ func interactive(p *profile.Profile, o *plugin.Options) error {
o.UI.PrintErr(err)
}
continue
+ } else if okValues := groups[name]; okValues != nil {
+ o.UI.PrintErr(fmt.Errorf("Unrecognized value for %s: %q. Use one of %s", name, value, strings.Join(okValues, ", ")))
+ continue
}
}
@@ -118,6 +124,23 @@ func interactive(p *profile.Profile, o *plugin.Options) error {
}
}
+// groupOptions returns a map containing all non-empty groups
+// mapped to an array of the option names in that group in
+// sorted order.
+func groupOptions(vars variables) map[string][]string {
+ groups := make(map[string][]string)
+ for name, option := range vars {
+ group := option.group
+ if group != "" {
+ groups[group] = append(groups[group], name)
+ }
+ }
+ for _, names := range groups {
+ sort.Strings(names)
+ }
+ return groups
+}
+
var generateReportWrapper = generateReport // For testing purposes.
// greetings prints a brief welcome and some overall profile