[Lldb-commits] [lldb] a633c5e - [lldb/crashlog] Add '-t|--target' option to interactive mode

Med Ismail Bennani via lldb-commits lldb-commits at lists.llvm.org
Tue Aug 9 21:02:02 PDT 2022


Author: Med Ismail Bennani
Date: 2022-08-09T21:01:37-07:00
New Revision: a633c5e11b4443000aa199a2df41eda4e2c6851b

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

LOG: [lldb/crashlog] Add '-t|--target' option to interactive mode

This patch introduces a new flag for the interactive crashlog mode, that
allow the user to specify, which target to use to create the scripted
process.

This can be very useful when lldb already have few targets created:
Instead of taking the first one (zeroth index), we will use that flag to
create a new target. If the user didn't provide a target path, we will rely
on the symbolicator to create a targer.If that fails and there are already
some targets loaded in lldb, we use the first one.

rdar://94682869

Differential Revision: https://reviews.llvm.org/D129611

Signed-off-by: Med Ismail Bennani <medismail.bennani at gmail.com>

Added: 
    

Modified: 
    lldb/examples/python/crashlog.py
    lldb/examples/python/scripted_process/crashlog_scripted_process.py
    lldb/test/Shell/ScriptInterpreter/Python/Crashlog/scripted_crashlog_json.test

Removed: 
    


################################################################################
diff  --git a/lldb/examples/python/crashlog.py b/lldb/examples/python/crashlog.py
index c30a0ec0a1e83..b6b3efe2b7935 100755
--- a/lldb/examples/python/crashlog.py
+++ b/lldb/examples/python/crashlog.py
@@ -1017,11 +1017,22 @@ def load_crashlog_in_scripted_process(debugger, crash_log_file, options):
 
     crashlog = CrashLogParser().parse(debugger, crashlog_path, False)
 
-    if debugger.GetNumTargets() > 0:
-        target = debugger.GetTargetAtIndex(0)
-    else:
+    target = lldb.SBTarget()
+    # 1. Try to use the user-provided target
+    if options.target_path:
+        target = debugger.CreateTarget(options.target_path)
+        if not target:
+            result.PutCString("error: couldn't create target provided by the \
+                              user ({})".format(options.target_path))
+            return
+    # 2. If the user didn't provide a target, try to create a target using the symbolicator
+    if not target or not target.IsValid():
         target = crashlog.create_target()
-    if not target:
+    # 3. If that didn't work, and a target is already loaded, use it
+    if (target is None  or not target.IsValid()) and debugger.GetNumTargets() > 0:
+        target = debugger.GetTargetAtIndex(0)
+    # 4. Fail
+    if target is None or not target.IsValid():
         result.PutCString("error: couldn't create target")
         return
 
@@ -1183,6 +1194,12 @@ def CreateSymbolicateCrashLogOptions(
             action='store_true',
             help='dump symbolicated stackframes without creating a debug session',
             default=True)
+        option_parser.add_option(
+            '--target',
+            '-t',
+            dest='target_path',
+            help='the target binary path that should be used for interactive crashlog (optional)',
+            default=None)
     return option_parser
 
 

diff  --git a/lldb/examples/python/scripted_process/crashlog_scripted_process.py b/lldb/examples/python/scripted_process/crashlog_scripted_process.py
index 70198da563aa3..6e7db946a0188 100644
--- a/lldb/examples/python/scripted_process/crashlog_scripted_process.py
+++ b/lldb/examples/python/scripted_process/crashlog_scripted_process.py
@@ -13,7 +13,7 @@ def parse_crashlog(self):
         try:
             crash_log = CrashLogParser().parse(self.dbg, self.crashlog_path, False)
         except Exception as e:
-            return
+            raise e
 
         self.pid = crash_log.process_id
         self.addr_mask = crash_log.addr_mask
@@ -44,6 +44,7 @@ def __init__(self, target: lldb.SBTarget, args : lldb.SBStructuredData):
         super().__init__(target, args)
 
         if not self.target or not self.target.IsValid():
+            # Return error
             return
 
         self.crashlog_path = None
@@ -54,6 +55,7 @@ def __init__(self, target: lldb.SBTarget, args : lldb.SBStructuredData):
                 self.crashlog_path = crashlog_path.GetStringValue(4096)
 
         if not self.crashlog_path:
+            # Return error
             return
 
         load_all_images = args.GetValueForKey("load_all_images")

diff  --git a/lldb/test/Shell/ScriptInterpreter/Python/Crashlog/scripted_crashlog_json.test b/lldb/test/Shell/ScriptInterpreter/Python/Crashlog/scripted_crashlog_json.test
index 0c5c252ff45f4..d8c91675e159f 100644
--- a/lldb/test/Shell/ScriptInterpreter/Python/Crashlog/scripted_crashlog_json.test
+++ b/lldb/test/Shell/ScriptInterpreter/Python/Crashlog/scripted_crashlog_json.test
@@ -2,8 +2,8 @@
 
 # RUN: mkdir -p %t.dir
 # RUN: yaml2obj %S/Inputs/interactive_crashlog/multithread-test.yaml > %t.dir/multithread-test
-# RUN: %lldb %t.dir/multithread-test -o 'command script import lldb.macosx.crashlog' \
-# RUN: -o 'crashlog -a -i %S/Inputs/interactive_crashlog/multithread-test.ips' \
+# RUN: %lldb -o 'command script import lldb.macosx.crashlog' \
+# RUN: -o 'crashlog -a -i -t %t.dir/multithread-test %S/Inputs/interactive_crashlog/multithread-test.ips' \
 # RUN: -o "thread list" -o "bt all" 2>&1 | FileCheck %s
 
 # CHECK: "crashlog" {{.*}} commands have been installed, use the "--help" options on these commands


        


More information about the lldb-commits mailing list