SignalBus Diagnostics and Warnings
Review draft. This source page has not completed website editorial and release-specific verification.
SignalBus includes two related but separate debugging systems:
DiagnosticsWarningsDiagnostics record what happened.
Warnings identify activity that may deserve attention.
Both systems are observational only. They do not change routing, cancel messages, remove subscriptions, or repair gameplay logic.
What Diagnostics Are
Section titled “What Diagnostics Are”Diagnostics keep a bounded history of SignalBus activity for each World or Game Instance subsystem.
Default capacity:
2,000 events per subsystemA subsystem means one specific SignalBus context, such as:
World - PIE 0Game Instance - PIE 0World - PIE 1Game Instance - PIE 1Each context keeps its own history.
Diagnostics may record:
- Context initialization and teardown
- Subscription added
- Subscription removed
- Expired subscription cleanup
- Immediate publish start
- Immediate publish completion
- Publish rejection
- Message queued
- Queue rejection
- Queued dispatch start
- Queued dispatch completion
- Subscriber invocation
- Subscriber callback duration
- Dispatch duration
- Queue delay
- Payload metadata
- Publisher identity
- Subscriber identity
- Message ID
- Payload type
- Dispatch ID
- Queue Entry ID
Diagnostics answer questions such as:
- Did the publish happen?
- Was it accepted?
- Was it Immediate or Queued?
- Which subscriber ran?
- How long did the callback take?
- Which context handled the message?
- Did the queue reject the message?
- Was the payload type correct?
What Warnings Are
Section titled “What Warnings Are”Warnings are higher-level observations produced by warning analysis.
Warnings highlight behavior that may be:
- Unexpected
- Inefficient
- Misconfigured
- Potentially unsafe
- Worth investigating
Default retained warning capacity:
1,000 warnings per subsystemWarnings are enabled by default in non-Shipping builds.
Warnings are disabled by default in Shipping builds.
A warning does not automatically mean SignalBus is broken.
It means SignalBus observed something that may deserve review.
Diagnostics and Warnings Are Independent
Section titled “Diagnostics and Warnings Are Independent”Diagnostics and warnings are separate systems.
Examples:
Diagnostics EnabledWarning Analysis DisabledIn this case:
- Event History continues
- New warnings are not created
Another example:
Diagnostics DisabledWarning Analysis EnabledIn this case:
- Retained Event History stops
- Warning analysis may still react to runtime activity
Clearing one does not clear the other.
Clear History -> clears diagnostic events only
Clear Warnings -> clears warnings onlyRouting continues in both cases.
Default Behavior
Section titled “Default Behavior”Non-Shipping Builds
Section titled “Non-Shipping Builds”Typical defaults:
Diagnostics: EnabledWarning Analysis: EnabledPayload Policy: FullThis is useful during development because the Inspector can show detailed event history and payload snapshots.
Shipping Builds
Section titled “Shipping Builds”Typical defaults:
Diagnostics: reduced or policy-controlledWarning Analysis: DisabledPayload Policy: HiddenShipping behavior protects performance and data exposure.
SignalBus routing remains functional.
Diagnostic History Capacity
Section titled “Diagnostic History Capacity”Each subsystem keeps a maximum of:
2,000 diagnostic eventsWhen the capacity is exceeded:
- Oldest events are removed
- Newest events continue to be recorded
Example:
2,000 events already storedNew event arrives -> oldest event is evicted -> new event is addedThis prevents unbounded memory growth.
Clearing history removes all retained events for the selected context.
It does not:
- Remove subscriptions
- Clear queued messages
- Clear warnings
- Stop routing
- Affect another context
Warning History Capacity
Section titled “Warning History Capacity”Each subsystem keeps a maximum of:
1,000 retained warningsWhen the capacity is exceeded:
- Old warnings may be evicted
- New warnings continue to be tracked
- Deduplication state remains bounded
This prevents warning analysis from growing indefinitely.
Payload Inspection
Section titled “Payload Inspection”Diagnostics can capture a read-only snapshot of payload information.
Payload inspection is separate from routing.
A payload may route successfully even when:
- Snapshot capture is disabled
- Snapshot capture is truncated
- A property is hidden
- Payload inspection fails
Diagnostics must never change message delivery.
Payload Inspection Policies
Section titled “Payload Inspection Policies”SignalBus supports these payload inspection policies:
FullSummaryOnlyMetadataOnlyHiddenCaptures supported payload values, subject to limits.
Use when:
- Debugging wrong values
- Verifying Blueprint payload extraction
- Inspecting nested structs
- Comparing expected and actual message contents
Example:
Payload Type: ST_HealthChangedOld Health: 100New Health: 75Damage Type: FireUse Full carefully with large or sensitive payloads.
SummaryOnly
Section titled “SummaryOnly”Captures a compact summary instead of a full property tree.
Use when:
- You need meaningful context
- Full payload detail is unnecessary
- You want lower diagnostic overhead
- Payloads contain large containers
Example:
ST_InventoryChangedSlots Changed: 3Inventory ID: PlayerInventorySnapshot: SummaryExact summary behavior depends on the payload inspector implementation.
MetadataOnly
Section titled “MetadataOnly”Captures structural information without payload values.
Typical metadata includes:
- Payload type
- Struct size
- Property count
- Inspection policy
- Truncation state
Example:
Payload Type: ST_SaveCompletedStruct Size: 72 bytesProperty Count: 3Use MetadataOnly when:
- Values are sensitive
- Performance matters
- Type verification is enough
- Trace-style analysis is preferred
Hidden
Section titled “Hidden”Suppresses payload values.
Example:
Payload Type: ST_LoginResultPayload Values: HiddenUse Hidden when:
- Data may contain secrets
- Shipping behavior is being tested
- You want minimal inspection overhead
- Payload contents should not appear in tooling
Payload Limits
Section titled “Payload Limits”SignalBus limits payload inspection to protect memory and editor responsiveness.
Current limits:
Total snapshot budget: 64 KiBNested struct depth: 8Container elements: 64Scalar text: 1,024 charactersTotal Snapshot Budget
Section titled “Total Snapshot Budget”Maximum captured payload snapshot size:
64 KiBWhen the budget is exceeded:
- The snapshot is truncated
- Routing still succeeds
- A payload truncation warning may be created
Example:
Large payload -> first supported data captured -> remaining values omitted -> snapshot marked TruncatedNested Struct Depth
Section titled “Nested Struct Depth”Maximum nested depth:
8Example:
Root└── Level 1 └── Level 2 ... └── Level 8Anything deeper is not expanded.
This protects against deeply recursive or unusually nested payloads.
Container Element Limit
Section titled “Container Element Limit”Maximum captured elements per container:
64This applies to supported arrays, sets, and maps inside reflected payload structs.
Example:
Array contains 500 entries -> first 64 inspected -> remaining entries omitted -> snapshot marked TruncatedThe actual routed payload still contains all 500 entries.
Only diagnostics are limited.
Scalar Text Limit
Section titled “Scalar Text Limit”Maximum captured scalar text length:
1,024 charactersLong strings are truncated.
Example:
Original string: 5,000 charactersCaptured string: first 1,024 characters plus truncation markerThis prevents large text fields from overwhelming diagnostics.
Hidden Properties
Section titled “Hidden Properties”Properties can be excluded from diagnostic values with:
UPROPERTY(meta = (SignalBusHidden))FString AuthenticationToken;A hidden property:
- Is not shown by value
- Is not searchable by value
- Is not traced as a payload value
- Does not enter Broadcast Graph search text
- Does not enter warning summaries through payload capture
The Inspector may indicate that the field exists, but it should not expose the contents.
Use SignalBusHidden for:
- Authentication tokens
- Private identifiers
- Sensitive player data
- Internal secrets
- Large values that should not be displayed
Warning Types
Section titled “Warning Types”SignalBus warning analysis may report:
- No-subscriber publish
- Duplicate subscription
- Expired subscription
- High message rate
- Slow subscriber callback
- Slow dispatch
- Reentrancy
- Queue backlog
- Long queue delay
- Payload truncation
- Payload capture failure
- Publish rejection
- Queue rejection
Each warning is explained below.
No-Subscriber Publish Warning
Section titled “No-Subscriber Publish Warning”What it means
Section titled “What it means”A message was published, but no active matching subscriber was found.
Example:
Publisher:Combat.PlayerDied
Active matching subscribers:0Why it may happen
Section titled “Why it may happen”- Subscriber was never created
- Subscribe code did not run
- Wrong scope
- Message ID typo
- Wrong payload type
- Listener was destroyed
- Listener unsubscribed
- The event is intentionally fire-and-forget
Example
Section titled “Example”Publisher:
World scopeMessage ID: Quest.AdvancedPayload: ST_QuestAdvancedSubscriber:
Game Instance scopeMessage ID: Quest.AdvancedPayload: ST_QuestAdvancedResult:
No matching World subscriberHow to investigate
Section titled “How to investigate”- Select the correct context.
- Open Active Subscriptions.
- Search for the Message ID.
- Compare scope.
- Compare exact payload type.
- Confirm the listener is alive.
- Check whether Subscribe executed.
When it is harmless
Section titled “When it is harmless”Some events are intentionally optional.
Example:
Debug.TelemetryEventA no-subscriber warning may be expected if no telemetry listener is active.
Duplicate Subscription Warning
Section titled “Duplicate Subscription Warning”What it means
Section titled “What it means”The same logical listener appears to have registered more than once for the same contract.
Example:
BP_HUDController -> subscribes twice to Combat.HealthChangedOne publish may then produce two callbacks.
Why it may happen
Section titled “Why it may happen”- Subscribe called every Tick
- Subscribe called during repeated widget activation
- Begin Play path runs more than expected
- Reinitialization does not unsubscribe first
- Duplicate components exist
Example
Section titled “Example”Widget Construct -> Subscribe
Widget Activated -> Subscribe againResult:
One message -> callback runs twiceHow to investigate
Section titled “How to investigate”- Open Active Subscriptions.
- Filter by subscriber identity.
- Compare Message ID and payload type.
- Check subscription handles.
- Review the subscriber lifecycle.
- Confirm unsubscribe occurs before re-subscribing.
Subscribe once or store and remove the previous handle.
Expired Subscription Warning
Section titled “Expired Subscription Warning”What it means
Section titled “What it means”A subscription’s weak lifetime owner no longer exists.
SignalBus skipped or pruned the subscription.
Why it may happen
Section titled “Why it may happen”- Actor was destroyed
- Component ended play
- Widget was removed
- UObject was garbage collected
- Manual cleanup did not occur before owner destruction
Example
Section titled “Example”Enemy Actor subscribesEnemy Actor is destroyedLater message publishes -> expired subscription is detected -> callback is skipped -> subscription is prunedIs this dangerous?
Section titled “Is this dangerous?”Usually no.
The weak owner prevents stale object access.
However, frequent expired-subscription warnings may indicate cleanup should happen earlier.
Unsubscribe during:
EndPlayDeinitializeWidget deactivationComponent shutdownHigh Message Rate Warning
Section titled “High Message Rate Warning”What it means
Section titled “What it means”A Message ID is being published very frequently within the warning analysis window.
Why it may happen
Section titled “Why it may happen”- Publishing every Tick
- Publishing inside a loop
- Repeated state writes
- Duplicate publishers
- Accidental feedback loop
- High-volume telemetry-like use
Example
Section titled “Example”Bad pattern:
Tick -> Publish Combat.HealthChangedeven when Health did not change.
Why it matters
Section titled “Why it matters”High rates can cause:
- Callback cost
- Diagnostic growth
- Warning noise
- Queue backlog
- Editor slowdown
- Large trace files
How to investigate
Section titled “How to investigate”- Filter Event History by Message ID.
- Check publisher identities.
- Check event timestamps.
- Confirm whether state actually changed.
- Look for duplicate publishers.
- Check reentrancy warnings.
Publish only when meaningful state changes.
Slow Subscriber Callback Warning
Section titled “Slow Subscriber Callback Warning”What it means
Section titled “What it means”One subscriber callback exceeded the warning threshold.
Example
Section titled “Example”Message: Inventory.RefreshedSubscriber: BP_InventoryWidgetCallback duration: 12 msWhy it may happen
Section titled “Why it may happen”- Expensive Blueprint logic
- Large loops
- UI rebuilding
- Asset loading
- Synchronous file access
- Heavy logging
- Large payload copies
- Nested publishes
- Complex queries
Why it matters
Section titled “Why it matters”Immediate callbacks block the publisher.
One slow callback can make the whole immediate dispatch slow.
How to investigate
Section titled “How to investigate”- Open Warnings.
- Note the subscriber identity.
- Note the Subscription Handle.
- Find the matching dispatch in Event History.
- Compare callback durations.
- Profile the subscriber logic.
- Consider Queued delivery if synchronous completion is unnecessary.
- Reduce callback work
- Defer expensive work
- Cache results
- Avoid blocking I/O
- Use smaller payloads
- Split unrelated reactions
Slow Dispatch Warning
Section titled “Slow Dispatch Warning”What it means
Section titled “What it means”The entire dispatch took longer than the configured threshold.
Why it may happen
Section titled “Why it may happen”- Many subscribers
- One or more slow callbacks
- Deep immediate nesting
- Heavy diagnostics
- Expired subscription cleanup
- Complex subscriber-side work
Example
Section titled “Example”Dispatch ID: 102Subscribers invoked: 75Dispatch duration: 22 msHow to investigate
Section titled “How to investigate”- Find the Dispatch ID.
- Review all SubscriberCompleted events.
- Compare callback durations.
- Count matched and invoked subscribers.
- Check for nested immediate dispatch.
- Check whether diagnostics or payload inspection are unusually heavy.
A slow dispatch may be caused by one slow subscriber or many small subscribers.
Reentrancy Warning
Section titled “Reentrancy Warning”What it means
Section titled “What it means”A subscriber published another immediate message while a dispatch was already active.
Reentrancy is supported, but it may create difficult execution chains.
Example
Section titled “Example”Publish Message A -> Subscriber A -> Publish Message B -> Subscriber BThis can be valid.
A dangerous cycle is:
Message A subscriber publishes Message BMessage B subscriber publishes Message AThis may create:
- Infinite recursion
- Stack overflow
- Repeated state mutation
- Hard-to-follow ordering
- Performance spikes
How to investigate
Section titled “How to investigate”- Inspect Dispatch IDs and dispatch depth.
- Compare Message IDs.
- Identify which callback initiated the nested publish.
- Check for A -> B -> A cycles.
- Review whether Queued delivery is more appropriate.
Use:
- State guards
- Generation counters
- Queued dispatch
- Explicit cycle prevention
- Idempotent subscriber logic
Queue Backlog Warning
Section titled “Queue Backlog Warning”What it means
Section titled “What it means”The pending queue has grown beyond a warning threshold.
Why it may happen
Section titled “Why it may happen”- Too many queued publishes
- Queue processing cannot keep up
- Publishing every Tick
- Large bursts
- Long subscriber callbacks
- Messages queued during queue processing
- Paused or non-ticking context
Example
Section titled “Example”Pending Queue Count: 4,500Processing Limit Per Pass: 1,000Several passes are required to drain the queue.
Why it matters
Section titled “Why it matters”A growing backlog increases:
- Delivery latency
- Memory usage
- Stale event risk
- QueueFull rejection risk
How to investigate
Section titled “How to investigate”- Open Pending Queue.
- Check pending count.
- Filter Event History for MessageQueued.
- Identify high-volume Message IDs.
- Compare enqueue rate with processing rate.
- Review subscriber callback durations.
- Check queue delay warnings.
- Reduce publish rate
- Use Immediate where truly appropriate
- Coalesce duplicate queued events
- Replace repeated events with durable state plus one notification
- Optimize slow subscribers
Long Queue Delay Warning
Section titled “Long Queue Delay Warning”What it means
Section titled “What it means”A queued message waited longer than expected before dispatch.
Example
Section titled “Example”QueueEntryId: 42Queue delay: 350 msWhy it may happen
Section titled “Why it may happen”- Large backlog
- Context paused
- Processing limit reached
- Message queued during active processing
- Expensive earlier callbacks
- Very high enqueue volume
How to investigate
Section titled “How to investigate”- Find Queue Entry ID.
- Compare enqueue and dispatch times.
- Check pending queue count.
- Review queue backlog warnings.
- Inspect earlier queued messages.
- Check whether the World or Game Instance was ticking.
Queue delay does not include callback execution time.
Payload Truncation Warning
Section titled “Payload Truncation Warning”What it means
Section titled “What it means”Diagnostic payload capture reached one or more safety limits.
Possible limits:
64 KiB total snapshotDepth 864 container elements1,024-character scalar textExample
Section titled “Example”Payload array contains 500 elementsOnly 64 capturedSnapshot marked TruncatedImportant
Section titled “Important”The routed payload is not truncated.
Only the diagnostic snapshot is truncated.
Usually none is required.
For easier diagnostics:
- Use smaller payloads
- Use MetadataOnly
- Pass identifiers instead of bulk state
- Avoid large nested containers
Payload Capture Failure Warning
Section titled “Payload Capture Failure Warning”What it means
Section titled “What it means”SignalBus could not fully inspect the payload for diagnostics.
Why it may happen
Section titled “Why it may happen”- Unsupported reflected property type
- Invalid reflected data
- Unexpected property layout
- Capture budget failure
- Engine compatibility issue
- Diagnostic traversal edge case
Important
Section titled “Important”Routing should still continue.
Payload inspection failure must not block valid delivery.
How to investigate
Section titled “How to investigate”- Check payload type.
- Review unsupported fields.
- Try MetadataOnly.
- Reproduce with a smaller payload.
- Check engine-version compatibility.
- Run payload inspection automation tests.
Publish Rejection Warning
Section titled “Publish Rejection Warning”What it means
Section titled “What it means”An immediate publish was rejected before dispatch.
Possible reasons include:
- Invalid Message ID
- Invalid payload type
- Invalid context
- Unsupported payload
- Wrong thread
- Subsystem unavailable
Example
Section titled “Example”FSignalBusMessageId InvalidId;Bus->PublishImmediate(InvalidId, Payload, this);Result:
Publish rejectedReason: Invalid Message IDHow to investigate
Section titled “How to investigate”- Review failure reason.
- Confirm Message ID is not
None. - Confirm payload is a reflected struct.
- Confirm valid World or Game Instance.
- Confirm game-thread execution.
- Confirm subsystem exists.
Queue Rejection Warning
Section titled “Queue Rejection Warning”What it means
Section titled “What it means”A queued publish was rejected.
Possible reasons include:
- Invalid Message ID
- Invalid payload
- Invalid context
- Queue full
- Payload copy failure
- Wrong thread
- Subsystem unavailable
QueueFull Example
Section titled “QueueFull Example”Current capacity:
10,000 messages per subsystemWhen full:
10,001st enqueue -> rejectedHow to investigate
Section titled “How to investigate”- Review rejection reason.
- Check Pending Queue.
- Check queue backlog warnings.
- Confirm payload can be copied.
- Confirm Message ID and context.
- Reduce enqueue rate.
Warning Severity
Section titled “Warning Severity”Warnings may use severity levels such as:
InfoWarningErrorExact severity names depend on the implementation.
General interpretation:
Notable behavior that may be normal.
Example:
Expired subscription prunedWarning
Section titled “Warning”Potential design or performance issue.
Example:
High message rateSlow callbackQueue backlogA serious rejection or invariant problem.
Example:
Invalid publish contractUnexpected payload inspection failureSeverity does not automatically change runtime behavior.
Warning Deduplication
Section titled “Warning Deduplication”Repeated occurrences may update one warning instead of creating a new row every time.
Example:
No Subscriber warningOccurrence Count: 25This reduces warning spam.
A warning may track:
- First occurrence
- Last occurrence
- Occurrence count
- Resolved state
- Related Message ID
- Related Dispatch ID
- Related Queue Entry ID
Warning Resolution
Section titled “Warning Resolution”Some warnings can become resolved when the condition stops.
Example:
Queue backlog detectedQueue later drainsWarning marked ResolvedResolved warnings may remain visible for historical context.
Clearing warnings removes retained warning records.
It does not disable future warning creation.
Step-by-Step: Investigating a Warning
Section titled “Step-by-Step: Investigating a Warning”Use this general workflow.
- Open:
Tools → Director Suite → Runtime Inspectors → SignalBus Runtime Inspector- Select the correct World or Game Instance context.
- Open the Warnings panel.
- Select the warning.
- Record:
- Warning type
- Severity
- Message ID
- Subscriber identity
- Dispatch ID
- Queue Entry ID
- Occurrence count
- Open Event History.
- Filter by the same Message ID or ID fields.
- Review the related publish, queue, dispatch, and callback events.
- Open Active Subscriptions if the warning involves a listener.
- Open Pending Queue if the warning involves queue delay or backlog.
- Reproduce the issue with history cleared.
- Fix the gameplay or system logic.
- Re-run and confirm the warning no longer occurs or resolves.
Example Investigation: No Subscriber
Section titled “Example Investigation: No Subscriber”Warning:
Type: No SubscriberMessage ID: Quest.AdvancedScope: WorldSteps:
- Select the World context.
- Open Active Subscriptions.
- Search for
Quest.Advanced. - Confirm expected payload type.
- If missing, inspect listener Begin Play.
- Confirm Subscribe ran.
- Confirm listener uses World scope.
- Trigger publish again.
- Confirm warning no longer increments.
Example Investigation: Slow Callback
Section titled “Example Investigation: Slow Callback”Warning:
Type: Slow SubscriberMessage ID: Inventory.RefreshedSubscriber: BP_InventoryWidgetDuration: 18 msSteps:
- Open Event History.
- Find the Dispatch ID.
- Find SubscriberCompleted for the widget.
- Confirm callback duration.
- Profile the widget event.
- Remove unnecessary loops or rebuilds.
- Consider Queued delivery only if timing allows.
- Trigger again.
- Confirm duration decreases.
Example Investigation: Queue Backlog
Section titled “Example Investigation: Queue Backlog”Warning:
Type: Queue BacklogPending Count: 6,200Steps:
- Open Pending Queue.
- Sort or filter by Message ID.
- Identify the largest producer.
- Check whether it publishes every Tick.
- Check whether several identical events can be coalesced.
- Review slow subscriber warnings.
- Reduce enqueue rate.
- Run again.
- Confirm pending count drains.
Clearing History and Warnings
Section titled “Clearing History and Warnings”Clear History
Section titled “Clear History”Clears diagnostics for the selected context.
It does not:
- Clear warnings
- Clear queue
- Remove subscriptions
- Disable diagnostics
- Affect another context
Clear Warnings
Section titled “Clear Warnings”Clears warning records for the selected context.
It does not:
- Clear diagnostics
- Fix the condition
- Disable warning analysis
- Affect another context
A cleared warning may return when the condition happens again.
Performance Considerations
Section titled “Performance Considerations”Diagnostics and warnings have runtime cost.
Cost may come from:
- Event creation
- Identity string capture
- Payload inspection
- Warning analysis
- History retention
- Editor refresh
To reduce overhead:
- Use MetadataOnly or Hidden when values are unnecessary
- Disable diagnostics during performance-sensitive testing
- Disable warning analysis when not needed
- Avoid publishing every Tick
- Keep payloads compact
- Clear history before reproducing one issue
- Inspect one context at a time
Tracing remains separate and may still be enabled when diagnostics are disabled.
Common Misunderstandings
Section titled “Common Misunderstandings”A warning means delivery failed
Section titled “A warning means delivery failed”Not always.
Examples:
Slow callbackHigh message ratePayload truncationDelivery may still have succeeded.
Clearing warnings fixes the problem
Section titled “Clearing warnings fixes the problem”No.
It only removes the retained record.
Disabling diagnostics disables SignalBus
Section titled “Disabling diagnostics disables SignalBus”No.
Routing continues.
Payload truncation changes the message
Section titled “Payload truncation changes the message”No.
Only the diagnostic snapshot is truncated.
No-subscriber is always a bug
Section titled “No-subscriber is always a bug”No.
Some messages are intentionally optional.
Duplicate subscription is always invalid
Section titled “Duplicate subscription is always invalid”Not necessarily.
Duplicate subscriptions are supported, but they should be intentional.
Recommended Development Workflow
Section titled “Recommended Development Workflow”During normal development:
Diagnostics: EnabledWarning Analysis: EnabledPayload Policy: Full or SummaryOnlyDuring high-volume performance testing:
Diagnostics: Disabled or MetadataOnlyWarning Analysis: Enabled selectivelyTracing: Enabled when neededDuring sensitive-data testing:
Payload Policy: HiddenSignalBusHidden: applied to sensitive fieldsBefore release:
Review all persistent warningsConfirm no accidental duplicate subscriptionsConfirm no high-rate Tick publishersConfirm queue backlog remains controlledConfirm slow callbacks are understoodConfirm payload privacy rulesQuick Reference
Section titled “Quick Reference”| Warning | Usually means | First place to check |
|---|---|---|
| No Subscriber | No active exact match | Active Subscriptions |
| Duplicate Subscription | Same listener registered repeatedly | Listener lifecycle |
| Expired Subscription | Owner was destroyed | EndPlay cleanup |
| High Message Rate | Message published too often | Event History |
| Slow Callback | One listener is expensive | Subscriber timing |
| Slow Dispatch | Whole fan-out is expensive | Dispatch details |
| Reentrancy | Nested immediate publish | Dispatch depth |
| Queue Backlog | Enqueue rate exceeds processing | Pending Queue |
| Long Queue Delay | Message waited too long | Queue Entry ID |
| Payload Truncated | Diagnostic limits reached | Payload Viewer |
| Payload Capture Failure | Inspector could not inspect fully | Payload type |
| Publish Rejected | Invalid immediate publish | Failure reason |
| Queue Rejected | Invalid enqueue or queue full | Queue result |
Summary
Section titled “Summary”Diagnostics tell you:
What happenedWarnings tell you:
What may need attentionThe recommended troubleshooting order is:
1. Select the correct context2. Read the warning3. Match Message ID and IDs4. Inspect Event History5. Inspect Active Subscriptions6. Inspect Pending Queue7. Reproduce with cleared history8. Fix the underlying logic9. Confirm the warning stops or resolves