mib created this revision. mib added reviewers: jasonmolenda, jingham, JDevlieghere, labath, LLDB. mib added a project: LLDB. mib requested review of this revision. Herald added a subscriber: lldb-commits.
In order to facilitate the writting of Scripted Processes, this patch introduces a `ScriptedProcess` python base class in the lldb module. The base class holds the python interface with all the - abstract - methods that need to be implemented by the inherited class but also some methods that can be overwritten. This patch also provides an example of a Scripted Process with the `ScriptedMachCoreProcess` class. rdar://65508855 Signed-off-by: Med Ismail Bennani <medismail.benn...@gmail.com> Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D95712 Files: lldb/bindings/python/python-scripted-process.swig lldb/bindings/python/python.swig lldb/examples/python/scripted_process.py
Index: lldb/examples/python/scripted_process.py =================================================================== --- /dev/null +++ lldb/examples/python/scripted_process.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 + +from typing import List + +import lldb +from lldb import ScriptedProcess + +class ScriptedMachCoreProcess(ScriptedProcess): + def __init__(self, target: lldb.SBTarget, args : lldb.SBStructuredData): + super().__init__(target, args) + + ### Main functionalities + def get_num_memory_regions(self) -> int: + return len(self.memory_regions) + def get_memory_region_at_index(self, idx: int) -> lldb.SBMemoryRegionInfo: + return self.memory_regions[idx] + def get_num_threads(self) -> int: + return len(self.threads) + def get_thread_at_index(self, idx: int) -> lldb.SBThread: + return self.threads[idx] + def get_register_for_thread(self, tid: int): + return tid + def read_memory_at_address(self, addr: int) -> lldb.SBData: + return addr + def get_loaded_images(self) -> List[str]: + return self.loaded_images + def get_process_id(self) -> int: + return 42 + + ### Process state + def can_debug(self) -> bool: + return True + def is_alive(self) -> bool: + return True + +def __lldb_init_module(debugger, dict): + debugger.HandleCommand( + "process launch -S -C %s.%s" % (__name__, + ScriptedMachCoreProcess.__name__)) + Index: lldb/bindings/python/python.swig =================================================================== --- lldb/bindings/python/python.swig +++ lldb/bindings/python/python.swig @@ -130,6 +130,7 @@ %include "interfaces.swig" %include "python-extensions.swig" %include "python-wrapper.swig" +%include "python-scripted-process.swig" %pythoncode%{ _initialize = True Index: lldb/bindings/python/python-scripted-process.swig =================================================================== --- /dev/null +++ lldb/bindings/python/python-scripted-process.swig @@ -0,0 +1,65 @@ +%pythoncode %{ +from abc import ABC, abstractmethod +from typing import List + +import lldb + +class ScriptedProcess(ABC): + @abstractmethod + def __init__(self, target: lldb.SBTarget, args : lldb.SBStructuredData): + self.process_id = 0 + self.memory_regions = [] + self.threads = [] + self.loaded_images = [] + self.stops = [] + self.target = None + self.args = None + if isinstance(target, lldb.SBTarget) and target.IsValid(): + self.target = target + if isinstance(args, lldb.SBStructuredData) and args.IsValid(): + self.args = args + + ### Main funcitonnalities + @abstractmethod + def get_num_memory_regions(self) -> int: + pass + + @abstractmethod + def get_memory_region_at_index(self, idx: int) -> lldb.SBMemoryRegionInfo: + pass + + @abstractmethod + def get_num_threads(self): + pass + + @abstractmethod + def get_thread_at_index(self, idx: int) -> lldb.SBThread: + pass + + @abstractmethod + def get_register_for_thread(self, tid:int): + pass + + @abstractmethod + def read_memory_at_address(self, addr:int) -> lldb.SBData: + pass + + @abstractmethod + def get_loaded_images(self) -> List[str]: # -> List[lldb.SBModule]: + pass + + def get_process_id(self) -> int + return self.process_id + + ### Process state + def launch(self) -> lldb.SBError: + return lldb.SBError() + + @abstractmethod + def can_debug(self) -> bool: + pass + + @abstractmethod + def is_alive(self) -> bool: + pass +%}
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits