diff --git a/lldb/examples/python/crashlog.py b/lldb/examples/python/crashlog.py index bb20f3a25c1c1..b466be6a62428 100755 --- a/lldb/examples/python/crashlog.py +++ b/lldb/examples/python/crashlog.py @@ -1540,13 +1540,19 @@ def load_crashlog_in_scripted_process(debugger, crashlog_path, options, result): } ) ) + + crashlog_sd = lldb.SBStructuredData() + crashlog_sd.SetGenericValue( + lldb.SBScriptObject(crashlog, lldb.eScriptLanguagePython) + ) + structured_data.SetValueForKey("crashlog", crashlog_sd) + launch_info = lldb.SBLaunchInfo(None) launch_info.SetProcessPluginName("ScriptedProcess") launch_info.SetScriptedProcessClassName( "crashlog_scripted_process.CrashLogScriptedProcess" ) launch_info.SetScriptedProcessDictionary(structured_data) - launch_info.SetLaunchFlags(lldb.eLaunchFlagStopAtEntry) error = lldb.SBError() process = target.Launch(launch_info, error) @@ -1554,9 +1560,6 @@ def load_crashlog_in_scripted_process(debugger, crashlog_path, options, result): if not process or error.Fail(): raise InteractiveCrashLogException("couldn't launch Scripted Process", error) - process.GetScriptedImplementation().set_crashlog(crashlog) - process.Continue() - if not options.skip_status: @contextlib.contextmanager diff --git a/lldb/examples/python/crashlog_scripted_process.py b/lldb/examples/python/crashlog_scripted_process.py index f54a8df0479e7..6c6eec8d12b96 100644 --- a/lldb/examples/python/crashlog_scripted_process.py +++ b/lldb/examples/python/crashlog_scripted_process.py @@ -10,8 +10,7 @@ class CrashLogScriptedProcess(ScriptedProcess): - def set_crashlog(self, crashlog): - self.crashlog = crashlog + def parse_crashlog(self): if self.crashlog.process_id: if type(self.crashlog.process_id) is int: self.pid = self.crashlog.process_id @@ -29,8 +28,6 @@ def set_crashlog(self, crashlog): if hasattr(self.crashlog, "asb"): self.extended_thread_info = self.crashlog.asb - crashlog.load_images(self.options, self.loaded_images) - for thread in self.crashlog.threads: if ( hasattr(thread, "app_specific_backtrace") @@ -92,10 +89,21 @@ def __init__(self, exe_ctx: lldb.SBExecutionContext, args: lldb.SBStructuredData no_parallel_image_loading.GetBooleanValue() ) + self.crashlog = None + crashlog = args.GetValueForKey("crashlog") + if crashlog and crashlog.IsValid(): + if crashlog.GetType() == lldb.eStructuredDataTypeGeneric: + self.crashlog = crashlog.GetGenericValue() + + if not self.crashlog: + # Return error + return + self.pid = super().get_process_id() self.crashed_thread_idx = 0 self.exception = None self.extended_thread_info = None + self.parse_crashlog() def read_memory_at_address( self, addr: int, size: int, error: lldb.SBError @@ -104,8 +112,8 @@ def read_memory_at_address( return lldb.SBData() def get_loaded_images(self): - # TODO: Iterate over corefile_target modules and build a data structure - # from it. + if len(self.loaded_images) == 0: + self.crashlog.load_images(self.options, self.loaded_images) return self.loaded_images def should_stop(self) -> bool: