> For the complete documentation index, see [llms.txt](https://asperazera.gitbook.io/ultimate-event-system/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://asperazera.gitbook.io/ultimate-event-system/advanced/debugging.md).

# Debugging & Tools

UES ships with built-in tools to see what's happening on the event bus in real time - an on-screen overlay, console commands, and Blueprint stats nodes.

***

### On-Screen Overlay

<figure><img src="/files/ijwLlIfgC32sRDHPhER4" alt=""><figcaption></figcaption></figure>

The quickest way to watch events live.

1. Press **`~` (tilde)** to open the console during play.
2. Type:

   ```
   UltimateEvents.ToggleOverlay
   ```
3. A translucent debug panel appears, showing live stats and a rolling history of recent events (`[HH:MM:SS] Tag (Sender) [Subs: N]`).
4. Run the command again to hide it.

{% hint style="info" %}
**Want subscriber names on screen?** Enable **Show Subscribers In Overlay** in **Project Settings → Plugins → Ultimate Event System**. Each event then lists who received it. You can also toggle the overlay from Blueprints with the **Toggle Debug Overlay** node (**UES → Debug**).
{% endhint %}

<figure><img src="/files/nBmJLxX5whKhgIlpxrjO" alt="" width="563"><figcaption></figcaption></figure>

***

### Console Commands

| Command                                  | What it does                                                                                      |
| ---------------------------------------- | ------------------------------------------------------------------------------------------------- |
| `UltimateEvents.ToggleOverlay`           | Shows / hides the on-screen debug overlay.                                                        |
| `UltimateEvents.DumpActiveSubscriptions` | Prints every live subscription to the **Output Log**, grouped by tag, plus catch-all subscribers. |

<figure><img src="/files/c9acmECV2tmAPtsuAEiT" alt=""><figcaption></figcaption></figure>

***

### Stats from Blueprints - **Get Event System Stats**

<figure><img src="/files/QRjKsRQL1hdfbFGeWLN7" alt=""><figcaption></figcaption></figure>

Query the bus at runtime with the **Get Event System Stats** node (**UES → Debug**). It returns:

* **Active Subscriptions Count** - total live bindings.
* **Unique Tags Count** - how many tags have at least one subscriber.
* **Total Events Sent** - events fired since the game started.
* **Stale Subscriptions Cleaned** - how many destroyed-object bindings were auto-cleaned.

Great for a custom debug HUD or for asserting "no leaks" in automated tests.

***

### Who's Listening? - **Get Event Subscribers**

<figure><img src="/files/AiW4v2BY0itnnIXCU4Jy" alt=""><figcaption></figcaption></figure>

The **Get Event Subscribers** node (**UES → Debug**) answers *"who is subscribed to these tags right now?"*

* **Event Tags** (`Gameplay Tag Container`) - the tags to query (a single tag auto-converts).
* **Include Parents** - if `True`, also counts subscribers of parent tags.
* **Subscribers** (`Array of Object`) - the live subscribers. Use **Length** to get the count.

{% hint style="info" %}
**Handy check:** before sending an event, confirm anyone is even listening (`Length > 0`).
{% endhint %}

***

### Logging (Project Settings)

Under **Project Settings → Plugins → Ultimate Event System**:

* **Log All Events** - logs every event sent to the Output Log.
* **Log Subscriber Details** - also logs each event's recipients. *Heavier - turn it off for shipping builds.*
* **Get Payload Warnings** - controls how loudly a **Get Payload** type mismatch reports. On a mismatch, the **Message Log** opens when you stop play; click the entry to jump straight to the offending node.

<figure><img src="/files/2slJuX4IYY0iCbYl1yHO" alt=""><figcaption></figcaption></figure>

***

### Safety Nets

* **Infinite-loop protection:** if events trigger each other in a runaway recursion, UES stops the storm at a configurable depth (**Max Event Call Stack Depth**, default `50`) and logs an error instead of hanging the engine.
* **Re-entrancy safe:** it's fine for a callback to send another event, unsubscribe itself, or clear subscriptions - the bus handles these safely mid-broadcast.
