1import lldb # type: ignore[import] 2 3 4# load into lldb instance with: 5# command script import tools/lldb/deploy_debugger.py 6 7target = lldb.debugger.GetSelectedTarget() 8bp = target.BreakpointCreateByRegex("__deploy_register_code") 9bp.SetScriptCallbackBody( 10 """\ 11process = frame.thread.GetProcess() 12target = process.target 13symbol_addr = frame.module.FindSymbol("__deploy_module_info").GetStartAddress() 14info_addr = symbol_addr.GetLoadAddress(target) 15e = lldb.SBError() 16ptr_size = 8 17str_addr = process.ReadPointerFromMemory(info_addr, e) 18file_addr = process.ReadPointerFromMemory(info_addr + ptr_size, e) 19file_size = process.ReadPointerFromMemory(info_addr + 2*ptr_size, e) 20load_bias = process.ReadPointerFromMemory(info_addr + 3*ptr_size, e) 21name = process.ReadCStringFromMemory(str_addr, 512, e) 22r = process.ReadMemory(file_addr, file_size, e) 23from tempfile import NamedTemporaryFile 24from pathlib import Path 25stem = Path(name).stem 26with NamedTemporaryFile(prefix=stem, suffix='.so', delete=False) as tf: 27 tf.write(r) 28 print("torch_deploy registering debug inforation for ", tf.name) 29 cmd1 = f"target modules add {tf.name}" 30 # print(cmd1) 31 lldb.debugger.HandleCommand(cmd1) 32 cmd2 = f"target modules load -f {tf.name} -s {hex(load_bias)}" 33 # print(cmd2) 34 lldb.debugger.HandleCommand(cmd2) 35 36return False 37""" 38) 39