# `mix mob.trace_otp`
[🔗](https://github.com/genericjam/mob_dev/blob/main/lib/mix/tasks/mob.trace_otp.ex#L1)

Runs `MobDev.OtpTrace.Harness` under full call tracing and reports
the runtime modules + MFAs actually exercised.

This is the empirical complement to `mix mob.audit_otp` (which uses
static reachability). Combined, they give a high-confidence answer
to "what does any Elixir runtime actually need."

## Usage

    mix mob.trace_otp                 # Run all phases, summary report
    mix mob.trace_otp --phase otp     # Just one phase
    mix mob.trace_otp --json out.json # Machine-readable dump

    # Trace a real running app on a connected device for 30s.
    # First run `mix mob.connect` in another terminal.
    mix mob.trace_otp --remote pigeon_ios_defd4bdc@127.0.0.1 --duration 30000

Local mode (default) runs a synthetic Elixir/OTP characterization
harness inside the host BEAM. Remote mode wraps `:erlang.trace_pattern`
on a connected device node and captures the MFAs hit during a real
user session — drive the app interactively while the trace runs.

## Phases

    language     — pattern match, comprehensions, structs, protocols
    collections  — Enum, List, Map, MapSet, Stream, Range
    strings      — String, Binary, charlist, codepoints
    processes    — spawn, send/receive, monitor, link, Task
    otp          — GenServer, Supervisor, Application, Logger
    data         — ETS, persistent_term, Date/Time, System
    errors       — raise/rescue, throw/catch, exit, exception structs
    all          — every phase (default)

## Output

Plain mode prints a summary + sorted module list. `--json` writes a
JSON file with the full MFA set, suitable for cross-referencing
against the static audit (`mix mob.audit_otp`) to find modules
shipped-but-never-called.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
