[Lldb-commits] [PATCH] D119755: [crashlog] Change heuristic to stripping the meta data from crashlogs

Jonas Devlieghere via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Mon Feb 14 11:47:36 PST 2022


JDevlieghere created this revision.
JDevlieghere added a reviewer: mib.
JDevlieghere requested review of this revision.

Instead of pro-actively trying to determine if the first line in a crashlog contains meta data, change the heuristic to trying to parse the whole file first. If that fails, strip the first line and try again. If that fails again, we assume the input is not JSON and we fall back to the old textual parser.

rdar://88580543


https://reviews.llvm.org/D119755

Files:
  lldb/examples/python/crashlog.py


Index: lldb/examples/python/crashlog.py
===================================================================
--- lldb/examples/python/crashlog.py
+++ lldb/examples/python/crashlog.py
@@ -399,7 +399,7 @@
 
 
 class CrashLogParseException(Exception):
-   pass
+    pass
 
 
 class CrashLogParser:
@@ -416,22 +416,22 @@
         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:


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D119755.408532.patch
Type: text/x-patch
Size: 1333 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20220214/87aed38d/attachment.bin>


More information about the lldb-commits mailing list