Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions lldb/examples/python/crashlog.py
Original file line number Diff line number Diff line change
Expand Up @@ -1540,23 +1540,26 @@ 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)

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
Expand Down
20 changes: 14 additions & 6 deletions lldb/examples/python/crashlog_scripted_process.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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")
Expand Down Expand Up @@ -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
Expand All @@ -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:
Expand Down
Loading