Real-Time Error Checker

Events on this desk are invented on a timer. The URL field is a label stored in the JSON export. Open DevTools on the failing tab when a real checkout is throwing.

Simulated error feed

Simulated feed. Start is a local timer. No request leaves this tab.

Simulated session
Timer plus a coin flip. Nothing leaves the tab.
Idle
Looks like a probe. Never fetched.
sec
30 events per 100 ticks
Capture
Collector snippet
Local IIFE. Writes window.__errorFeed. Sends nowhere.
Live feed
Newest 40 matching rows. Tap a row for the fake stack.
Offline
No events
Press Start for the timer, or Tick once.
    Total
    0
    Critical
    0
    Rate
    0/m
    Session
    0:00
    DetailsTap a row
    Select an event
    Stack

    A customer hits Pay. The button dies. Support forwards a screenshot of a spinner. Nobody kept the TypeError.

    Sentry would have the event. Chrome DevTools would have the event, if the tab were still open.

    A real-time error checker on this page does not attach to checkout. Press Start. A local timer begins. Each tick rolls against the noise slider. A hit inserts one mock JavaScript, network, console, perf, or DOM row. The URL field is a label written into the JSON export.

    I have watched people paste https://toolexe.com, wait thirty seconds, then file a ticket saying the monitor shows nothing. The monitor was never looking.

    Paste a URL. Nothing connects.

    https://toolexe.com in the field looks like a probe. The field is a label. Export writes targetUrl. No fetch. No websocket. No CORS preflight against the host.

    Tick does not request /api/v1/items. Tick rolls a mock row if the noise slider says yes.

    Need to watch real XHR failures? Stay in DevTools Network, or take a HAR to the Network Request Analyzer. A production beacon belongs in Sentry, Bugsnag, or the ingest your team already pays for.

    The placeholder uses toolexe.com on purpose. A blank box teaches nothing about what the field stores.

    Five chips, two lives

    Each chip names a class of failure. On a real page those classes map to listeners. Here they map to canned strings.

    JS
    On a live tab: error plus unhandledrejection. Here: TypeError, ReferenceError, RangeError, SyntaxError, always stacked through a fake app.js.
    Network
    Live: failed fetch, 404, CORS, refused sockets. Here: those messages with a fake /api/v1/items path. No status body. No timing.
    Console
    Live: a wrap around console.error. Here: invalid state, deprecated API, failed assertion.
    Perf
    Live: long tasks, layout thrash, dropped frames. Here: 240 ms, 38 fps. The numbers are props.
    DOM
    Live: missing nodes, illegal mutations, focus on a hidden control. Here: the same sentences, still invented.

    Uncheck a chip to hide the type from new ticks. Rows already in the list stay until Clear.

    Perf plus DOM start off on purpose. A feed with five types at once looks busy. Busy is not a lesson. Turn them on after you already know how the filter boxes behave.

    Critical on this feed is a dice roll

    Severity is not computed from the message.

    About one row in ten draws critical. High takes the next slice. Medium takes the largest slice. Low fills the rest. The same TypeError string will wear four different badges across a session.

    Treat the badge as UI to practice filtering. Never treat the badge as a priority. A CORS failure marked low still blocks checkout. A console warn marked critical remains a console warn.

    Filter Critical, then High, then search the message. The noise slider exists to show how fast a feed becomes unreadable. At 30 events per 100 ticks the list stays teachable. At 80 the counters on the right climb while the useful row drowns.

    Crank noise to 70. Press Start. Wait a minute. Try to find the first CORS row without the search box.

    Fail once. You now know why production ingest needs fingerprints, not a raw console dump in Slack.

    Back to the timer

    If the dump is already on the clipboard, leave this desk. Open the Stack Trace Formatter. A live feed answers "what is throwing right now." A paste answers "which file do I open." Mixing those two questions wastes the next hour.

    Four places people look for the same failure

    Search results for a live error checker mix rehearsal UIs with production SDKs. The mix-up is expensive. Pick the source before you pick a severity.

    Where the errors in the ticket came from
    SourceLive?What you getWalk away when
    This deskNo. Local timer.Mock rows, fake stacks, JSON exportA real origin is failing
    Chrome DevToolsYes, this browserThe actual exception, network, consoleThe tab is already closed
    Sentry, Bugsnag, similar ingestYes, productionGrouped issues, sourcemaps, ownersYou have no SDK, or the event is a one-off on localhost
    A log fileAfter the factCounts, patterns, timestampsYou need a stack the logger never kept

    A rotating log belongs on the Error Log Analyzer. One crash dump belongs on the formatter. Notes about what you already tried belong on the Debug Session Recorder.

    window.__errorFeed is a local array

    Generate copies a small IIFE. Listeners: error, unhandledrejection, a wrap around console.error. Events land in window.__errorFeed on the page where you paste the snippet.

    The snippet does not POST. No DSN. No retry. Refresh wipes the array. Cross-origin iframes stay silent. Minified filenames stay minified.

    Paste the snippet on localhost while reproducing. Type __errorFeed in the console. Copy the array. Stop.

    Do not ship this IIFE to a customer checkout. A three-listener notebook is not an SDK. Source maps, release versions, user privacy, PII scrubbing, sampling: all missing. Teams who drop a gist into production learn this when a customer's email address shows up in console.error of a payment form.

    Need a syntax check on a snippet from a stack? Open the JavaScript Syntax Checker. The checker compiles. This desk never runs your application code.

    Forty rows on screen, the rest in export

    The live list renders the newest forty matching the current filters. Total on the right counts every event in memory. Export writes the full array as JSON named error-feed- plus a timestamp. Copy writes the same payload to the clipboard.

    Clear drops memory. Stop leaves rows in place. Idle means nothing has been generated yet.

    Rate waits fifteen seconds before the first per-minute number. Fresh sessions look stuck at 0/m. Wait.

    Session clock starts at Start. Stop does not freeze the clock, because startAt stays set. Read the pill for live versus stopped. Ignore the clock after Stop if you expected a pause.

    One quiet drill

    1. 0:00 Noise at 30. JS, Network, Console on. Perf plus DOM off. Press Start.
    2. 0:08 First row, or an empty tick. Empty ticks are the point of the slider.
    3. 0:40 Open a high JS row. Read the fake stack. Notice app.js:44 every time. The path is a prop.
    4. 1:00 Filter type Network. Search CORS. Export. Open the JSON. Confirm targetUrl is your label, not a response.

    After the drill, the useful next move is a real exception, not another minute of mock noise. Format the stack. Or count the log. Or write the bug report so a home directory does not ride along, using the Bug Report Template Generator.

    Walk away from this desk

    When a real exception is in hand, format the stack. When the same exception repeats, count the log. When you are still reproducing, record the session notes. Keep this page for the hour before the fire, when the filter muscle needs a workout without a customer on the line.

    Questions from people who pasted a production URL

    The field never fetched the host. These answers start from there.

    I pasted https://toolexe.com. Why is the feed empty of real errors?

    The URL is a label stored in the JSON export. Start never fetches the host. Rows are mock events from a local timer. Open DevTools on the real page, or use the ingest your team already runs, when you need errors from a live origin.

    Why does the same TypeError keep changing severity?

    Severity is a random draw. About one row in ten is critical. The badge is there so you practice the filter dropdown. Do not file a ticket from a critical mock. A CORS row marked low is still a CORS row.

    Does Tick hit /api/v1/items?

    No. Tick rolls one mock event if the noise slider says yes. The /api/v1/items path is a string in the fake network row. Watch Network in DevTools, or load a HAR in the Network Request Analyzer, for a real failure.

    Is the collector snippet sending events back to this page?

    No. The IIFE writes window.__errorFeed on the page where you paste. Nothing POSTs. Refresh clears the array. Do not ship the snippet to a customer checkout. There is no DSN, no sampling, no PII scrub.

    Older rows vanished after the list grew. Are they gone?

    The on-screen feed keeps the newest 40 rows matching the current filters. Total on the right still counts every event in memory. Export writes the full array. Clear is the only control dropping memory.

    Rate sits at 0/m after I press Start. Is the timer dead?

    Rate waits fifteen seconds before the first per-minute number. The pill should read Live. The pulse should move. Empty ticks still count as ticks. If the pill stays Idle, Start never bound. Reload the page.

    I have a real log file, not a live console. Wrong desk?

    Yes. Take the file to the Error Log Analyzer. Take a single crash dump to the Stack Trace Formatter. This desk is rehearsal for a moving feed. A file already happened.

    Does anything I type leave the browser?

    No. The timer, the mock rows, copy, export, plus snippet generation all run in this tab. The URL you type is written into a JSON file you download locally. Close the tab. The buffers die with the tab.