Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e4ba560

Browse files
committed
add address to function id
splits different calls to the same function into multiple stacks and allows addr2line use to get the line number
1 parent f135982 commit e4ba560

1 file changed

Lines changed: 10 additions & 8 deletions

File tree

perf-syscollapse.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,20 +53,21 @@ def demangle(s):
5353
p = sp.Popen(['c++filt', s], stdout=sp.PIPE)
5454
return p.communicate(s)[0]
5555
else:
56-
p = sp.Popen(['c++filt'] + s, stdout=sp.PIPE)
56+
p = sp.Popen(['c++filt'] + list(s), stdout=sp.PIPE)
5757
return p.communicate(s)[0].splitlines()
5858

5959

6060
jtraces = dict()
6161
trace = None
6262
for l in sys.stdin:
6363
if not l.strip():
64-
key = tuple(trace.bt)
65-
if key in jtraces:
66-
jtraces[key].data['count'] += trace.data['count']
67-
else:
68-
trace.bt = demangle(trace.bt)
69-
jtraces[key] = trace
64+
key = tuple(trace.bt)
65+
if key in jtraces:
66+
jtraces[key].data['count'] += trace.data['count']
67+
else:
68+
fun = demangle(x[0] for x in trace.bt)
69+
trace.bt = [' '.join(y) for y in zip(fun, (x[1] for x in trace.bt))]
70+
jtraces[key] = trace
7071
trace = None
7172
continue
7273
if trace is None:
@@ -76,8 +77,9 @@ def demangle(s):
7677
trace.fun = fun[:-1]
7778
trace.data = parse_data(trace.fun, rest)
7879
else:
80+
# addr2line could be used to get line number in function
7981
addr, fun, rest = l.split(None, 2)
80-
trace.bt.append(fun)
82+
trace.bt.append((fun, addr))
8183

8284

8385
for t in jtraces.values():

0 commit comments

Comments
 (0)