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

Med Ismail Bennani via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Tue Jul 12 18:15:29 PDT 2022


mib created this revision.
mib added a reviewer: JDevlieghere.
mib added a project: LLDB.
Herald added a project: All.
mib requested review of this revision.
Herald added a subscriber: lldb-commits.

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 that fails, we rely on the symbolicator to
create a targer. If that also fails and there are already some targets
loaded in lldb, we use the first one.

rdar://94682869

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


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D129611

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


Index: lldb/test/Shell/ScriptInterpreter/Python/Crashlog/scripted_crashlog_json.test
===================================================================
--- lldb/test/Shell/ScriptInterpreter/Python/Crashlog/scripted_crashlog_json.test
+++ lldb/test/Shell/ScriptInterpreter/Python/Crashlog/scripted_crashlog_json.test
@@ -2,7 +2,7 @@
 
 # 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' -o 'crashlog -a -i %S/Inputs/interactive_crashlog/multithread-test.ips' -o "thread list" -o "bt all" 2>&1 | FileCheck %s
+# RUN: %lldb -o 'command script import lldb.macosx.crashlog' -o 'crashlog -a -i -t %t.dir/multithread-test %S/Inputs/interactive_crashlog/multithread-test.ips' -o "thread list" -o "bt all" 2>&1 | FileCheck %s
 
 # CHECK: "crashlog" {{.*}} commands have been installed, use the "--help" options on these commands
 
Index: lldb/examples/python/scripted_process/crashlog_scripted_process.py
===================================================================
--- lldb/examples/python/scripted_process/crashlog_scripted_process.py
+++ lldb/examples/python/scripted_process/crashlog_scripted_process.py
@@ -43,7 +43,8 @@
     def __init__(self, target: lldb.SBTarget, args : lldb.SBStructuredData):
         super().__init__(target, args)
 
-        if not self.target or not self.target.IsValid():
+        if not self.target.GetExecutable() or not self.target.IsValid():
+            # Return error
             return
 
         self.crashlog_path = None
@@ -54,6 +55,7 @@
                 self.crashlog_path = crashlog_path.GetStringValue(4096)
 
         if not self.crashlog_path:
+            # Return error
             return
 
         load_all_images = args.GetValueForKey("load_all_images")
Index: lldb/examples/python/crashlog.py
===================================================================
--- lldb/examples/python/crashlog.py
+++ lldb/examples/python/crashlog.py
@@ -1017,11 +1017,18 @@
 
     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 is not None and options.target_path != "":
+        target = debugger.CreateTarget(options.target_path)
+    # 2. If that didn't work, try to create a target using the symbolicator
+    if target is None 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 +1190,11 @@
             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')
     return option_parser
 
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D129611.444129.patch
Type: text/x-patch
Size: 3375 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20220713/974c44b5/attachment.bin>


More information about the lldb-commits mailing list