[crashlog] Change heuristic to stripping the meta data from crashlogs
Instead trying to pro-actively determine if the first line in a crashlog contains meta data, change the heuristic to do the following: 1. To trying to parse the whole file. If that fails, then: 2. Strip the first line and try parsing the remainder of the file. If that fails, then: 3. Fall back to the textual crashlog parser. rdar://88580543 Differential revision: https://reviews.llvm.org/D119755
This commit is contained in:
parent
d52866e1a8
commit
343662a028
|
@ -397,7 +397,7 @@ class CrashLogFormatException(Exception):
|
|||
|
||||
|
||||
class CrashLogParseException(Exception):
|
||||
pass
|
||||
pass
|
||||
|
||||
|
||||
class CrashLogParser:
|
||||
|
@ -414,22 +414,22 @@ class JSONCrashLogParser:
|
|||
self.verbose = verbose
|
||||
self.crashlog = CrashLog(debugger, self.path, self.verbose)
|
||||
|
||||
def parse_json(self, buffer):
|
||||
try:
|
||||
return json.loads(buffer)
|
||||
except:
|
||||
# The first line can contain meta data. Try stripping it and try
|
||||
# again.
|
||||
head, _, tail = buffer.partition('\n')
|
||||
return json.loads(tail)
|
||||
|
||||
def parse(self):
|
||||
with open(self.path, 'r') as f:
|
||||
buffer = f.read()
|
||||
|
||||
# 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)
|
||||
except ValueError:
|
||||
self.data = self.parse_json(buffer)
|
||||
except:
|
||||
raise CrashLogFormatException()
|
||||
|
||||
try:
|
||||
|
|
Loading…
Reference in a new issue