diff options
author | Hana Kim <hyangah@gmail.com> | 2016-06-15 12:53:05 -0400 |
---|---|---|
committer | Hyang-Ah Hana Kim <hyangah@gmail.com> | 2016-06-16 16:22:03 +0000 |
commit | c3818e56d0f60493a63b2bb03a09f261d3e0ada2 (patch) | |
tree | aa7d13e6c9b04ad44f43a211fd146490cb67f8e9 | |
parent | ea2ac3fe5fb2011b077809e60bc018e0c6caa66c (diff) | |
download | go-c3818e56d0f60493a63b2bb03a09f261d3e0ada2.tar.gz go-c3818e56d0f60493a63b2bb03a09f261d3e0ada2.zip |
internal/trace: err if binary is not supplied for old trace
Change-Id: Id25c90993c4cbb7449d7031301b6d214a67d7633
Reviewed-on: https://go-review.googlesource.com/24134
Reviewed-by: Dmitry Vyukov <dvyukov@google.com>
Run-TryBot: Dmitry Vyukov <dvyukov@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
-rw-r--r-- | src/internal/trace/parser.go | 25 | ||||
-rw-r--r-- | src/internal/trace/parser_test.go | 4 |
2 files changed, 22 insertions, 7 deletions
diff --git a/src/internal/trace/parser.go b/src/internal/trace/parser.go index 843d0eaf63..c31517f683 100644 --- a/src/internal/trace/parser.go +++ b/src/internal/trace/parser.go @@ -60,21 +60,34 @@ const ( // Parse parses, post-processes and verifies the trace. func Parse(r io.Reader, bin string) ([]*Event, error) { - ver, rawEvents, strings, err := readTrace(r) + ver, events, err := parse(r, bin) if err != nil { return nil, err } + if ver < 1007 && bin == "" { + return nil, fmt.Errorf("for traces produced by go 1.6 or below, the binary argument must be provided") + } + return events, nil +} + +// parse parses, post-processes and verifies the trace. It returns the +// trace version and the list of events. +func parse(r io.Reader, bin string) (int, []*Event, error) { + ver, rawEvents, strings, err := readTrace(r) + if err != nil { + return 0, nil, err + } events, stacks, err := parseEvents(ver, rawEvents, strings) if err != nil { - return nil, err + return 0, nil, err } events, err = removeFutile(events) if err != nil { - return nil, err + return 0, nil, err } err = postProcessTrace(ver, events) if err != nil { - return nil, err + return 0, nil, err } // Attach stack traces. for _, ev := range events { @@ -84,10 +97,10 @@ func Parse(r io.Reader, bin string) ([]*Event, error) { } if ver < 1007 && bin != "" { if err := symbolize(events, bin); err != nil { - return nil, err + return 0, nil, err } } - return events, nil + return ver, events, nil } // rawEvent is a helper type used during parsing. diff --git a/src/internal/trace/parser_test.go b/src/internal/trace/parser_test.go index 340f106484..daad3e3ad7 100644 --- a/src/internal/trace/parser_test.go +++ b/src/internal/trace/parser_test.go @@ -42,7 +42,9 @@ func TestParseCanned(t *testing.T) { if err != nil { t.Fatalf("failed to read input file: %v", err) } - _, err = Parse(bytes.NewReader(data), "") + // Instead of Parse that requires a proper binary name for old traces, + // we use 'parse' that omits symbol lookup if an empty string is given. + _, _, err = parse(bytes.NewReader(data), "") switch { case strings.HasSuffix(f.Name(), "_good"): if err != nil { |