dotnet/runtime · error · Error
event.eventName is a required parameter, in event
Error message
event.eventName is a required parameter, in event: ${JSON.stringify(event)} What it means
Thrown by `mono_wasm_raise_debug_event` when the `event` argument is an object but lacks an `eventName` property. The proxy needs `eventName` to route the event, so its absence makes the event unprocessable.
Solutions
- Always set `eventName` explicitly on the event object literal.
- If building the event programmatically, assert the key is set before calling (`if (!event.eventName) return;`).
- Use a typed factory function whose return type requires `eventName`.
Example fix
// before: object without eventName
mono_wasm_raise_debug_event({ threadId: 1 }, {}); // throws
// after: include eventName
mono_wasm_raise_debug_event({ eventName: 'ThreadStarted', threadId: 1 }, {}); Defensive patterns
Strategy: validation
Validate before calling
function raiseDebugEventSafe (event, args) {
if (!event || typeof event !== 'object' || event.eventName === undefined) {
throw new TypeError('event.eventName is required');
}
return mono_wasm_raise_debug_event(event, args);
} Type guard
function hasEventName (v: unknown): v is { eventName: string } {
return v !== null && typeof v === 'object' && typeof (v as any).eventName === 'string';
} Prevention
- Always set `eventName` as the first property of the event object literal.
- Use a discriminated union so TypeScript forbids objects without `eventName`.
- Write a tiny factory: `makeEvent = (eventName, rest) => ({ eventName, ...rest })`.
When it happens
Trigger: Calling `mono_wasm_raise_debug_event(event, args)` (debug.ts:134) where `event` is `{}` or has properties but no `eventName`. Typical when constructing the event dynamically and forgetting to set `eventName`, or when spreading defaults that overwrite it to undefined.
Common situations: Refactoring an event builder that dropped the `eventName` field; computing the field conditionally and leaving it unset; copy-paste from an event schema that renamed the field.
Related errors
- args must be an object, but got
- event must be an object, but got
- "arguments" should be an array, but was
- Argument to stringToInternedMonoStringRoot must be a string…
- capacity >= 1
AI-assisted analysis of dotnet/runtime@60108ba66e (2026-08-10).
Data as JSON: /api/errors/e9a2a90f5b725b11.
Report an issue: GitHub.
Appendix: source
Thrown at src/mono/browser/runtime/debug.ts:135
export function mono_wasm_detach_debugger (): void {
forceThreadMemoryViewRefresh();
cwraps.mono_wasm_set_is_debugger_attached(false);
}
export function mono_wasm_change_debugger_log_level (level: number): void {
forceThreadMemoryViewRefresh();
cwraps.mono_wasm_change_debugger_log_level(level);
}
/**
* Raises an event for the debug proxy
*/
export function mono_wasm_raise_debug_event (event: WasmEvent, args = {}): void {
if (typeof event !== "object")
throw new Error(`event must be an object, but got ${JSON.stringify(event)}`);
if (event.eventName === undefined)
throw new Error(`event.eventName is a required parameter, in event: ${JSON.stringify(event)}`);
if (typeof args !== "object")
throw new Error(`args must be an object, but got ${JSON.stringify(args)}`);
// eslint-disable-next-line no-console
console.debug("mono_wasm_debug_event_raised:aef14bca-5519-4dfe-b35a-f867abc123ae", JSON.stringify(event), JSON.stringify(args));
}
export function mono_wasm_wait_for_debugger (): Promise<void> {
return new Promise<void>((resolve) => {
const interval = setInterval(() => {
if (runtimeHelpers.waitForDebugger != 1) {
return;
}
clearInterval(interval);
resolve();
}, 100);
});View on GitHub (pinned to 60108ba66e)