[Lldb-commits] [PATCH] D152886: [lldb] Make it easier to spot if sources were resolved in crashlog output

Jonas Devlieghere via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Tue Jun 13 21:30:07 PDT 2023


JDevlieghere created this revision.
JDevlieghere added reviewers: mib, aprantl.
Herald added a project: All.
JDevlieghere requested review of this revision.

It can be tricky to troubleshoot why the crashlog script can't show inline sources. The two most common causes are that we couldn't find the dSYM or, if we find the dSYM, that the path remapping included in the dSYMForUUID output isn't correct. The former is relatively easy to diagnose thanks to the messages printed by the crashlog script. The latter is harder, because you have to figure out the remapped source path. This patch tries to make it easier to diagnose the second issue by including whether the path in the source remapping is accessible. If at least one of the paths exists, we consider the image to have sources, and include that in the symbol resolution output.

Example output:

  Resolved symbols and sources for 11111111-2222-3333-4444-555555555555 /path/to/foo
  Resolved symbols s for 66666666-7777-8888-9999-AAAAAAAAAAAA /path/to/bar




https://reviews.llvm.org/D152886

Files:
  lldb/examples/python/crashlog.py
  lldb/examples/python/symbolication.py


Index: lldb/examples/python/symbolication.py
===================================================================
--- lldb/examples/python/symbolication.py
+++ lldb/examples/python/symbolication.py
@@ -257,6 +257,7 @@
         self.resolved_path = None
         self.resolve = False
         self.resolved = False
+        self.resolved_source = False
         self.unavailable = False
         self.uuid = uuid
         self.section_infos = list()
Index: lldb/examples/python/crashlog.py
===================================================================
--- lldb/examples/python/crashlog.py
+++ lldb/examples/python/crashlog.py
@@ -335,6 +335,15 @@
                                     plist["DBGSymbolRichExecutable"]
                                 )
                                 self.resolved_path = self.path
+                            if "DBGSourcePathRemapping" in plist:
+                                path_remapping = plist["DBGSourcePathRemapping"]
+                                for key in path_remapping:
+                                    source_path = os.path.expanduser(
+                                        path_remapping[key]
+                                    )
+                                    if os.path.exists(source_path):
+                                        self.resolved_source = True
+
             if not self.resolved_path and os.path.exists(self.path):
                 if not self.find_matching_slice():
                     return False
@@ -372,7 +381,11 @@
                 self.path and os.path.exists(self.path)
             ):
                 with print_lock:
-                    print("Resolved symbols for %s %s..." % (uuid_str, self.path))
+                    source_resolved = "and sources " if self.resolved_source else ""
+                    print(
+                        "Resolved symbols %sfor %s %s..."
+                        % (source_resolved, uuid_str, self.path)
+                    )
                 return True
             else:
                 self.unavailable = True


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D152886.531165.patch
Type: text/x-patch
Size: 2059 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20230614/c08b284d/attachment.bin>


More information about the lldb-commits mailing list