xref: /aosp_15_r20/external/pytorch/tools/lldb/deploy_debugger.py (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
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