[Lldb-commits] [lldb] fb6d1c0 - [crashlog] Fix and simplify the way we import lldb

Jonas Devlieghere via lldb-commits lldb-commits at lists.llvm.org
Mon Nov 2 19:00:02 PST 2020


Author: Jonas Devlieghere
Date: 2020-11-02T18:59:48-08:00
New Revision: fb6d1c020c1dcf4ab6e4529a4456f75f86c2379a

URL: https://github.com/llvm/llvm-project/commit/fb6d1c020c1dcf4ab6e4529a4456f75f86c2379a
DIFF: https://github.com/llvm/llvm-project/commit/fb6d1c020c1dcf4ab6e4529a4456f75f86c2379a.diff

LOG: [crashlog] Fix and simplify the way we import lldb

Don't try to guess the location of LLDB.framework but use xcrun to ask
the command line driver for the location of the lldb module.

Added: 
    

Modified: 
    lldb/examples/python/crashlog.py

Removed: 
    


################################################################################
diff  --git a/lldb/examples/python/crashlog.py b/lldb/examples/python/crashlog.py
index e1cde1131c55..68134f192ce0 100755
--- a/lldb/examples/python/crashlog.py
+++ b/lldb/examples/python/crashlog.py
@@ -43,50 +43,36 @@
 import time
 import uuid
 
-def read_plist(s):
-    if sys.version_info.major == 3:
-        return plistlib.loads(s)
-    else:
-        return plistlib.readPlistFromString(s)
-
 try:
-    # Just try for LLDB in case PYTHONPATH is already correctly setup
+    # First try for LLDB in case PYTHONPATH is already correctly setup.
     import lldb
 except ImportError:
-    lldb_python_dirs = list()
-    # lldb is not in the PYTHONPATH, try some defaults for the current platform
-    platform_system = platform.system()
-    if platform_system == 'Darwin':
-        # On Darwin, try the currently selected Xcode directory
-        xcode_dir = subprocess.check_output("xcode-select --print-path", shell=True).decode("utf-8")
-        if xcode_dir:
-            lldb_python_dirs.append(
-                os.path.realpath(
-                    xcode_dir +
-                    '/../SharedFrameworks/LLDB.framework/Resources/Python'))
-            lldb_python_dirs.append(
-                xcode_dir + '/Library/PrivateFrameworks/LLDB.framework/Resources/Python')
-        lldb_python_dirs.append(
-            '/System/Library/PrivateFrameworks/LLDB.framework/Resources/Python')
-    success = False
-    for lldb_python_dir in lldb_python_dirs:
-        if os.path.exists(lldb_python_dir):
-            if not (sys.path.__contains__(lldb_python_dir)):
-                sys.path.append(lldb_python_dir)
-                try:
-                    import lldb
-                except ImportError:
-                    pass
-                else:
-                    print('imported lldb from: "%s"' % (lldb_python_dir))
-                    success = True
-                    break
-    if not success:
+    # Ask the command line driver for the path to the lldb module. Copy over
+    # the environment so that SDKROOT is propagated to xcrun.
+    env = os.environ.copy()
+    env['LLDB_DEFAULT_PYTHON_VERSION'] = str(sys.version_info.major)
+    command =  ['xcrun', 'lldb', '-P'] if platform.system() == 'Darwin' else ['lldb', '-P']
+    # Extend the PYTHONPATH if the path exists and isn't already there.
+    lldb_python_path = subprocess.check_output(command, env=env).decode("utf-8").strip()
+    if os.path.exists(lldb_python_path) and not sys.path.__contains__(lldb_python_path):
+        sys.path.append(lldb_python_path)
+    # Try importing LLDB again.
+    try:
+        import lldb
+    except ImportError:
         print("error: couldn't locate the 'lldb' module, please set PYTHONPATH correctly")
         sys.exit(1)
 
 from lldb.utils import symbolication
 
+
+def read_plist(s):
+    if sys.version_info.major == 3:
+        return plistlib.loads(s)
+    else:
+        return plistlib.readPlistFromString(s)
+
+
 PARSE_MODE_NORMAL = 0
 PARSE_MODE_THREAD = 1
 PARSE_MODE_IMAGES = 2
@@ -442,13 +428,13 @@ def __init__(self, path, verbose):
                     continue
                 elif line.startswith('Exception Subtype:'): # iOS
                     self.thread_exception_data = line[18:].strip()
-                    continue                                                          
+                    continue
                 elif line.startswith('Crashed Thread:'):
                     self.crashed_thread_idx = int(line[15:].strip().split()[0])
                     continue
                 elif line.startswith('Triggered by Thread:'): # iOS
                     self.crashed_thread_idx = int(line[20:].strip().split()[0])
-                    continue                    
+                    continue
                 elif line.startswith('Report Version:'):
                     self.version = int(line[15:].strip())
                     continue


        


More information about the lldb-commits mailing list