[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):
|
class CrashLogParseException(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class CrashLogParser:
|
class CrashLogParser:
|
||||||
|
@ -414,22 +414,22 @@ class JSONCrashLogParser:
|
||||||
self.verbose = verbose
|
self.verbose = verbose
|
||||||
self.crashlog = CrashLog(debugger, self.path, self.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):
|
def parse(self):
|
||||||
with open(self.path, 'r') as f:
|
with open(self.path, 'r') as f:
|
||||||
buffer = f.read()
|
buffer = f.read()
|
||||||
|
|
||||||
# Skip the first line if it contains meta data.
|
|
||||||
head, _, tail = buffer.partition('\n')
|
|
||||||
try:
|
try:
|
||||||
metadata = json.loads(head)
|
self.data = self.parse_json(buffer)
|
||||||
if 'app_name' in metadata and 'app_version' in metadata:
|
except:
|
||||||
buffer = tail
|
|
||||||
except ValueError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
try:
|
|
||||||
self.data = json.loads(buffer)
|
|
||||||
except ValueError:
|
|
||||||
raise CrashLogFormatException()
|
raise CrashLogFormatException()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
Loading…
Reference in a new issue