|  | import lldb  # type: ignore[import] | 
|  |  | 
|  | # load into lldb instance with: | 
|  | #   command script import tools/lldb/deploy_debugger.py | 
|  |  | 
|  | target = lldb.debugger.GetSelectedTarget() | 
|  | bp = target.BreakpointCreateByRegex("__deploy_register_code") | 
|  | bp.SetScriptCallbackBody( | 
|  | """\ | 
|  | process = frame.thread.GetProcess() | 
|  | target = process.target | 
|  | symbol_addr = frame.module.FindSymbol("__deploy_module_info").GetStartAddress() | 
|  | info_addr = symbol_addr.GetLoadAddress(target) | 
|  | e = lldb.SBError() | 
|  | ptr_size = 8 | 
|  | str_addr = process.ReadPointerFromMemory(info_addr, e) | 
|  | file_addr = process.ReadPointerFromMemory(info_addr + ptr_size, e) | 
|  | file_size = process.ReadPointerFromMemory(info_addr + 2*ptr_size, e) | 
|  | load_bias = process.ReadPointerFromMemory(info_addr + 3*ptr_size, e) | 
|  | name = process.ReadCStringFromMemory(str_addr, 512, e) | 
|  | r = process.ReadMemory(file_addr, file_size, e) | 
|  | from tempfile import NamedTemporaryFile | 
|  | from pathlib import Path | 
|  | stem = Path(name).stem | 
|  | with NamedTemporaryFile(prefix=stem, suffix='.so', delete=False) as tf: | 
|  | tf.write(r) | 
|  | print("torch_deploy registering debug inforation for ", tf.name) | 
|  | cmd1 = f"target modules add {tf.name}" | 
|  | # print(cmd1) | 
|  | lldb.debugger.HandleCommand(cmd1) | 
|  | cmd2 = f"target modules load -f {tf.name} -s {hex(load_bias)}" | 
|  | # print(cmd2) | 
|  | lldb.debugger.HandleCommand(cmd2) | 
|  |  | 
|  | return False | 
|  | """ | 
|  | ) |