Jonas Devlieghere c7cbf32f57 [crashlog] Implement parser for JSON encoded crashlogs
Add a parser for JSON crashlogs. The CrashLogParser now defers to either
the JSONCrashLogParser or the TextCrashLogParser. It first tries to
interpret the input as JSON, and if that fails falling back to the
textual parser.

Differential revision: https://reviews.llvm.org/D91130
2020-11-16 13:50:37 -08:00

46 lines
2.5 KiB
Python

# -*- python -*-
# RUN: cd %S/../../../../../examples/python && cat %s | %lldb 2>&1 > %t.out
# RUN: cat %t.out | FileCheck %S/Inputs/Assertion.check
script
import crashlog
import json
parser = crashlog.JSONCrashLogParser("", "", False)
process_info_json = json.loads('{"pid" : 287, "procName" : "mediaserverd", "procPath" : "\/usr\/sbin\/mediaserverd"}')
parser.parse_process_info(process_info_json)
assert parser.crashlog.process_id == 287
assert parser.crashlog.process_identifier == "mediaserverd"
assert parser.crashlog.process_path == "/usr/sbin/mediaserverd"
crash_reason_json = json.loads('{"type" : "EXC_BAD_ACCESS", "signal" : "SIGSEGV", "subtype" : "KERN_INVALID_ADDRESS"}')
assert parser.parse_crash_reason(crash_reason_json) == "EXC_BAD_ACCESS (SIGSEGV) (KERN_INVALID_ADDRESS)"
crash_reason_json = json.loads('{"type" : "EXC_BAD_ACCESS", "signal" : "SIGSEGV"}')
assert parser.parse_crash_reason(crash_reason_json) == "EXC_BAD_ACCESS (SIGSEGV)"
crash_reason_json = json.loads('{"type" : "EXC_BAD_ACCESS", "signal" : "SIGSEGV", "codes" : "0x0000000000000000, 0x0000000000000000"}')
assert parser.parse_crash_reason(crash_reason_json) == "EXC_BAD_ACCESS (SIGSEGV) (0x0000000000000000, 0x0000000000000000)"
thread_state_json = json.loads('{"x":[268451845,117442566],"lr":7309751904,"cpsr":1073741824,"fp":6093236784,"sp":6093236704,"esr":1442840704,"pc":7309755088}')
registers = parser.parse_thread_registers(thread_state_json)
assert registers['x0'] == 268451845
assert registers['x1'] == 117442566
assert registers['lr'] == 7309751904
assert registers['cpsr'] ==1073741824
assert registers['fp'] == 6093236784
assert registers['sp'] == 6093236704
assert registers['esr'] == 1442840704
assert registers['pc'] == 7309755088
parser.data = json.loads('{"usedImages":[["f4d85377-f215-3da3-921e-3fe870e622e9",7309737984,"P"]],"legacyInfo":{"imageExtraInfo":[{"size":204800,"arch":"arm64e","path":"/usr/lib/system/libsystem_kernel.dylib","name":"libsystem_kernel.dylib"}]}}')
thread_json = json.loads('[{"triggered":true,"id":3835,"queue":"com.apple.bwgraph.devicevendor","frames":[[0,101472],[0,408892]]}]')
parser.parse_threads(thread_json)
assert len(parser.crashlog.threads) == 1
assert parser.crashlog.threads[0].queue == "com.apple.bwgraph.devicevendor"
assert len(parser.crashlog.threads[0].frames) == 2
assert parser.crashlog.threads[0].frames[0].pc == 7309839456
assert parser.crashlog.threads[0].frames[0].description == 101472
exit()