diff --git a/lldb/examples/python/crashlog.py b/lldb/examples/python/crashlog.py index e6d88a033a232..aec4096585222 100755 --- a/lldb/examples/python/crashlog.py +++ b/lldb/examples/python/crashlog.py @@ -415,8 +415,14 @@ def parse(self): with open(self.path, 'r') as f: buffer = f.read() - # First line is meta-data. - buffer = buffer[buffer.index('\n') + 1:] + # Skip the first line if it contains meta data. + head, _, tail = buffer.partition('\n') + try: + metadata = json.loads(head) + if 'app_name' in metadata and 'app_version' in metadata: + buffer = tail + except ValueError: + pass try: self.data = json.loads(buffer) diff --git a/lldb/test/Shell/ScriptInterpreter/Python/Crashlog/json.test b/lldb/test/Shell/ScriptInterpreter/Python/Crashlog/json.test index a514b07fe9f85..0c522e9d202b7 100644 --- a/lldb/test/Shell/ScriptInterpreter/Python/Crashlog/json.test +++ b/lldb/test/Shell/ScriptInterpreter/Python/Crashlog/json.test @@ -1,8 +1,13 @@ # RUN: %clang_host -g %S/Inputs/test.c -o %t.out + # RUN: cp %S/Inputs/a.out.ips %t.crash # RUN: python %S/patch-crashlog.py --binary %t.out --crashlog %t.crash --offsets '{"main":20, "bar":9, "foo":16}' --json # RUN: %lldb %t.out -o 'command script import lldb.macosx.crashlog' -o 'crashlog %t.crash' 2>&1 | FileCheck %s +# RUN: cp %S/Inputs/a.out.ips %t.nometadata.crash +# RUN: python %S/patch-crashlog.py --binary %t.out --crashlog %t.nometadata.crash --offsets '{"main":20, "bar":9, "foo":16}' --json --no-metadata +# RUN: %lldb %t.out -o 'command script import lldb.macosx.crashlog' -o 'crashlog %t.nometadata.crash' 2>&1 | FileCheck %s + # CHECK: Thread[0] Crashing Thread Name EXC_BAD_ACCESS (SIGSEGV) (KERN_INVALID_ADDRESS at 0x0000000000000000) # CHECK: [ 0] {{.*}}out`foo + 16 at test.c # CHECK: [ 1] {{.*}}out`bar + 8 at test.c diff --git a/lldb/test/Shell/ScriptInterpreter/Python/Crashlog/patch-crashlog.py b/lldb/test/Shell/ScriptInterpreter/Python/Crashlog/patch-crashlog.py index 28396c530355e..56558bc153ed7 100644 --- a/lldb/test/Shell/ScriptInterpreter/Python/Crashlog/patch-crashlog.py +++ b/lldb/test/Shell/ScriptInterpreter/Python/Crashlog/patch-crashlog.py @@ -49,6 +49,9 @@ def patch_addresses(self): self.data = self.data.replace( "@{}@".format(symbol), str(representation(patch_addr))) + def remove_metadata(self): + self.data= self.data[self.data.index('\n') + 1:] + if __name__ == '__main__': parser = argparse.ArgumentParser(description='Crashlog Patcher') @@ -56,6 +59,7 @@ def patch_addresses(self): parser.add_argument('--crashlog', required=True) parser.add_argument('--offsets', required=True) parser.add_argument('--json', default=False, action='store_true') + parser.add_argument('--no-metadata', default=False, action='store_true') args = parser.parse_args() offsets = json.loads(args.offsets) @@ -68,5 +72,8 @@ def patch_addresses(self): p.patch_uuid() p.patch_addresses() + if args.no_metadata: + p.remove_metadata() + with open(args.crashlog, 'w') as file: file.write(p.data)