NationalSecurityAgency/ghidra · error · RuntimeError

Usage: ghidra trace put-watchpoints

Error message

Usage: ghidra trace put-watchpoints

What it means

Raised by ghidra_trace_put_watchpoints when any argument is supplied. put-watchpoints writes the current process's watchpoints to the trace and is parameterless; the guard at commands.py:1660 rejects tokens.

Source

Thrown at Ghidra/Debug/Debugger-agent-lldb/src/main/py/src/ghidralldb/commands.py:1660

        raise RuntimeError("Usage: ghidra trace put-breakpoints")

    trace, tx = STATE.require_tx()
    with trace.client.batch() as b:
        put_breakpoints()


@convert_errors
def ghidra_trace_put_watchpoints(debugger: lldb.SBDebugger, command: str,
                                 result: lldb.SBCommandReturnObject,
                                 internal_dict: Dict[str, Any]) -> None:
    """Put the current process's watchpoints into the trace.

    Usage: ghidra trace put-watchpoints
    """

    args = shlex.split(command)
    if len(args) != 0:
        raise RuntimeError("Usage: ghidra trace put-watchpoints")

    trace, tx = STATE.require_tx()
    with trace.client.batch() as b:
        put_watchpoints()


def put_environment() -> None:
    proc = util.get_process()
    epath = ENV_PATTERN.format(procnum=proc.GetProcessID())
    envobj = STATE.require_trace().create_object(epath)
    envobj.set_value('Debugger', 'lldb')
    envobj.set_value('Arch', arch.get_arch())
    envobj.set_value('OS', arch.get_osabi())
    envobj.set_value('Endian', arch.get_endian())
    envobj.insert()


@convert_errors

View on GitHub (pinned to d5f144c24d)

Solutions

  1. Invoke bare: `ghidra trace put-watchpoints`.
  2. Set/select the desired watchpoint in LLDB before running; the command reflects current state.

Example fix

// before
ghidra trace put-watchpoints 1
// after
ghidra trace put-watchpoints
Defensive patterns

Strategy: validation

Validate before calling

assert len(command.split()) == 0, "put-watchpoints takes no arguments"

Prevention

When it happens

Trigger: Passing a watchpoint id or address, e.g. `ghidra trace put-watchpoints 1`, or trailing text.

Common situations: Symmetry assumption: since breakpoints can be listed by id in LLDB, users assume watchpoints take a selector here. The agent always publishes all watchpoints for the current process.

Related errors


AI-assisted analysis of NationalSecurityAgency/ghidra@d5f144c24d (2026-08-14). Data as JSON: /api/errors/dcce0b87ebaf4c00. Report an issue: GitHub.