File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff 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
6060jtraces = dict ()
6161trace = None
6262for 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
8385for t in jtraces .values ():
You can’t perform that action at this time.
0 commit comments