diff options
author | Jonas Devlieghere <jonas@devlieghere.com> | 2022-02-14 12:12:54 -0800 |
---|---|---|
committer | Jonas Devlieghere <jonas@devlieghere.com> | 2022-02-14 12:18:12 -0800 |
commit | 343662a0287845eceba068df6ce59eddcbe7beb1 (patch) | |
tree | 8700a642d04ee904eac969b12621b6fc60cf7f36 /lldb/examples/python/crashlog.py | |
parent | d52866e1a82dab57ad1b58a8bf21ca63eae2e155 (diff) | |
download | llvm-343662a0287845eceba068df6ce59eddcbe7beb1.zip llvm-343662a0287845eceba068df6ce59eddcbe7beb1.tar.gz llvm-343662a0287845eceba068df6ce59eddcbe7beb1.tar.bz2 |
[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
Diffstat (limited to 'lldb/examples/python/crashlog.py')
-rwxr-xr-x | lldb/examples/python/crashlog.py | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/lldb/examples/python/crashlog.py b/lldb/examples/python/crashlog.py index ec9f2d4..63be066 100755 --- a/lldb/examples/python/crashlog.py +++ b/lldb/examples/python/crashlog.py @@ -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: |