example

Example of the component espp/coredump v1.2.1
# CoreDump Example

This example shows how to use the espp `coredump` component to capture panics
to the flash core-dump partition and inspect them from a browser, on an
ESP32-S3's **native USB** port:

- On boot it prints the previous crash report (`espp::CoreDump::format_report()`):
  reset reason, panic reason, crashed task + PC, raw backtrace addresses and
  the exact `addr2line` command line — or a brownout / watchdog hint when no
  core dump exists for the reset.
- It brings up a composite USB device (`espp::UsbDevice`) with:
  - a **vendor / WebUSB** interface carrying the framed core-dump protocol, and
  - a **CDC** port carrying the **system console**
    (`tinyusb_console_init(TINYUSB_CDC_ACM_0)`)
    *and* the same framed protocol on the same stream.
- `espp::CoreDumpService` is mounted on BOTH streams, so the web console
  ([`../web/coredump_console.html`](../web/coredump_console.html), hosted at
  [esp-cpp.github.io/espp/apps/coredump_console.html](https://esp-cpp.github.io/espp/apps/coredump_console.html))
  can connect over **WebUSB** or **Web Serial**, show the crash summary,
  download the full ELF core dump (`core.elf`), resolve backtrace addresses
  against your local `build/coredump_example.elf`, and erase the stored dump.
- Test crashes can be triggered from the CDC console (type `help`) or the BOOT
  button:
  - `crash` — null-pointer write (StoreProhibited panic)
  - `assert` — failed `assert()`
  - `divzero` — integer divide by zero
  - `hang` — interrupts-off hang (INT_WDT reset, **no** core dump — shows the
    reset-reason-only report path)

## How to use example

### Hardware Required

An ESP32-S3 board with the **native USB-OTG** port wired to a USB connector
(e.g. ESP32-S3-DevKitC's "USB" connector, not the "UART" one). The TinyUSB
stack owns the S3's only USB PHY, so the system console is routed to the CDC
interface of this same connector.

### Build and Flash

Build the project and flash it to the board, then run monitor tool to view
serial output:

```
idf.py -p PORT flash
```

(To see the console output, attach a serial terminal — or the web console's
Web Serial connect — to the CDC port that enumerates on the native USB
connector: `screen /dev/tty.usbmodem*`.)

### Typical flow

1. Flash + connect the native USB port; open the web console and connect
   (WebUSB or Web Serial).
2. Type `crash` (console / web-console serial input) or press BOOT — the
   device panics, writes the core dump to flash and reboots.
3. On reconnect the boot banner (and the web console's *Get summary*) shows
   the crash report with the raw backtrace addresses.
4. Download `core.elf` in the web console and decode it fully:

   ```
   espcoredump.py info_corefile --core core.elf --core-format elf build/coredump_example.elf
   ```

   or resolve just the backtrace addresses:

   ```
   xtensa-esp32s3-elf-addr2line -pfiaC -e build/coredump_example.elf <addrs>
   ```

   (The web console can also do a client-side nearest-symbol resolution if
   you hand it the `.elf`.)
5. Erase the dump from the web console; the next boot reports a clean history.

To create a project from this example, run:

idf.py create-project-from-example "espp/coredump=1.2.1:example"

or download archive (~9.35 KB)