
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
46 lines
2.5 KiB
Python
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()
|