Files
Gary Riches e225e02256 PS5 DevTools: crash reports and memory graphs for PS5 homebrew
A resident payload that attaches to homebrew titles as their debugger,
writes a crash report (registers, every thread's backtrace, stack,
modules, code at the fault, memory before the crash) and shows a TV
notification, then hands the signal back. It samples every title's
memory (direct/GPU, heap, other), CPU and threads, and serves a
dashboard on port 9113. The host tool symbolicates reports against the
matching build's ELF, including reports a player sends as JSON.

Tested on firmware 13.60 with Super Mario Sunshine and SwitchWaker.

Claude-Session: https://claude.ai/code/session_016xMYBaR9GfxtETyVf6er1P
2026-10-14 15:50:36 +01:00

2.1 KiB

Working with PS5 DevTools

For an agent, or a person, who needs to know why a homebrew title crashed on a jailbroken PS5. README.md says how it works.

The loop

tools/ps5devtools.py load        # once per console boot (ELF loader on 9021)
tools/ps5devtools.py status      # is the title attached? ("attached", not "not attached")
# ... run the title until it crashes ...
tools/ps5devtools.py crashes
tools/ps5devtools.py report      # newest report, with function names

To prove the whole path on a title, test-crash makes its main thread take a real page fault: the title closes, a report appears, and the TV shows a notification. Do not use it on a title someone is playing.

A player can send a report's JSON (the dashboard's Download JSON, or the file from /data/devtools/crashes/): tools/ps5devtools.py report FILE.json reads it with names, without the console.

report prints the backtrace with source lines from the build's ELF and saves JSON and text under captures/. Read the backtrace first, then the fault address (a small address such as 0x18 is a null pointer plus a field offset), then the code at the fault.

Rules

  • Check the report says symbols: ... (matches). A report taken from a different build than the ELF on disk gives wrong names. Rebuild, or pass --elf to the build that was running.
  • handled means the title caught the signal itself and carried on. That is not a crash, though it may be a clue.
  • The payload attaches as a debugger. Do not run another debugger (gdbsrv, ps5debug) on the same title at the same time: only one can attach.
  • Stop the payload with quit, never by killing it: a debugger that exits takes its titles with it, and quit detaches first.
  • Never print the console's address: it lives in PS5_HOST or the ignored .env.
  • Ask before closing a title someone is playing.

Finding things on the console

  • Reports: /data/devtools/crashes/<id>.json
  • The payload's log: /data/devtools/devtools.log, or GET /api/log
  • The system's error records: /system_data/priv/error/history/*.json (CE-108255-1 is a title crash)