diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2016-09-03 11:58:52 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2016-09-05 12:49:47 +0200 |
| commit | ecaaca55fc28b2a149c8c44aa021855b46da3151 (patch) | |
| tree | 75ae0d1375e32eca11acb9c192a81012dab359ad /symbolizer | |
| parent | 2c881152ef59f54cdd748501e7c6179c8376a796 (diff) | |
symbolizer: support discriminators in addr2line output
Diffstat (limited to 'symbolizer')
| -rw-r--r-- | symbolizer/symbolizer.go | 6 | ||||
| -rw-r--r-- | symbolizer/symbolizer_test.go | 15 |
2 files changed, 20 insertions, 1 deletions
diff --git a/symbolizer/symbolizer.go b/symbolizer/symbolizer.go index 7138c86ae..07356a48a 100644 --- a/symbolizer/symbolizer.go +++ b/symbolizer/symbolizer.go @@ -164,8 +164,12 @@ func parse(s *bufio.Scanner) ([]Frame, error) { if colon == -1 { return nil, fmt.Errorf("failed to parse file:line in addr2line output: %v", ln) } + lineEnd := colon + 1 + for lineEnd < len(ln) && ln[lineEnd] >= '0' && ln[lineEnd] <= '9' { + lineEnd++ + } file := ln[:colon] - line, err := strconv.Atoi(ln[colon+1:]) + line, err := strconv.Atoi(ln[colon+1 : lineEnd]) if err != nil || fn == "" || fn == "??" || file == "" || file == "??" || line <= 0 { continue } diff --git a/symbolizer/symbolizer_test.go b/symbolizer/symbolizer_test.go index 3fd87e2a8..c7aeb48cb 100644 --- a/symbolizer/symbolizer_test.go +++ b/symbolizer/symbolizer_test.go @@ -85,6 +85,21 @@ func TestParse(t *testing.T) { "??:0\n", nil, }, + { + 0xffffffff81a2aff9, + "0xffffffff81a2aff9\n" + + "devpts_get_priv\n" + + "fs/devpts/inode.c:588 (discriminator 3)\n", + []Frame{ + Frame{ + PC: 0xffffffff81a2aff9, + Func: "devpts_get_priv", + File: "fs/devpts/inode.c", + Line: 588, + Inline: false, + }, + }, + }, } // Stub addr2line. |
