From 826f4e161c8c8f65fa9d8be716caf73faa41a5b6 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Sun, 12 Jan 2020 23:57:32 +0000 Subject: improve monkey-see-monkey-do backtrace output to include function name --- test/monkey-see-monkey-do | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) (limited to 'test/monkey-see-monkey-do') diff --git a/test/monkey-see-monkey-do b/test/monkey-see-monkey-do index b158dbdb0..4dc761aae 100755 --- a/test/monkey-see-monkey-do +++ b/test/monkey-see-monkey-do @@ -24,19 +24,27 @@ MONKEY_PATH = "./nsmonkey" mp.set_start_method('fork') +def decode_trace_line(l): + from re import findall, match + from subprocess import getstatusoutput + + caps = findall(r'./nsmonkey\(\+(0x[0-9a-f]+)\)', l); + if not caps: + return l + + exitcode, output = getstatusoutput( + "addr2line -e {} -a -p -f -C {} 2>/dev/null".format( + MONKEY_PATH, caps[0])) + if exitcode != 0: + return './nsmonkey(+{})'.format(caps[0]) + + m = match(r'0x(.+): (.+) at (.+):(.+)', output) + + return '{}:{}({})[0x{}]'.format( + m.group(3), m.group(4), m.group(2), m.group(1)) + def decode_trace(s): - import re - from subprocess import getoutput - addr_re = re.compile(r"./nsmonkey\(\+(0x[0-9a-f]+)\)") - def decode_line(l): - caps = addr_re.findall(l); - if caps: - return getoutput( - "addr2line -e {} {} 2>/dev/null || echo './nsmonkey(+{})'".format( - MONKEY_PATH, caps[0], caps[0])) - else: - return l - return "\n".join(decode_line(l) for l in s.split("\n")) + return "\n".join(decode_trace_line(l) for l in s.split("\n")) def child_run_test(verbose, parts): outcapture = StringIO() -- cgit v1.2.3