Tools Thicket Logo Tools Thicket

Local stack trace formatter

Stack Trace Formatter & Thread Dump Parser

Paste a raw exception stack trace or thread dump from a log, email, ticket, or chat. This browser-only stack trace formatter cleans terminal artifacts, detects common runtime patterns, keeps unknown lines visible, and shows readable and structured results without uploading your text.

Processed locally in your browser; pasted text is not uploaded. This tool formats and normalizes only; it does not diagnose root cause or resolve symbols.
Maximum 200,000 UTF-16 code units
0 / 200,000

Detected runtimePython
Exceptions0
Frames0
Threads0

Raw cleaned trace

Normalized trace

Unparsed lines 0

Structured JSON


      

      JSON download ready
    

How to use

  1. Paste a stack trace or thread dump into the input box. With restoration enabled, a one-line paste can convert escaped \\r\\n, \\n, \\r, and \\t sequences into line breaks and tabs.
  2. Review the cleaned trace, normalized view, detected runtime, frame and thread counts, and unparsed lines.
  3. Copy the ticket or Stack Overflow format, or download the structured JSON.

How the normalizer works

The parser first converts CRLF and standalone CR line endings to LF. If escaped-whitespace restoration is enabled and the original input contains no real CR or LF, it converts the supported escaped newline sequences and tabs. It then removes ANSI CSI sequences and selected control characters while retaining line structure and tabs.

Runtime selection is pattern-based. The parser scores evidence for Java, .NET, Node.js, Python, and Go, then uses Generic when the strongest evidence is absent or insufficient. It recognizes Java frames, causes, suppressed exceptions, and shared-frame ellipses; .NET source-location frames and inner-exception boundaries; Node.js frames with optional async and line/column values; Python traceback file lines; and Go panic, goroutine, function, and source-location lines. Partial or malformed input is processed where patterns are available, and other non-empty lines remain in unparsedLines.

Repeated-frame calculation

Only consecutive frames are collapsed. Two adjacent frames match when their parsed function, file, line, column, and async values are equal. The representative frame receives:

repeatCount = number of consecutive matching input frames

A single frame has repeatCount = 1; non-consecutive matches are not merged. Java’s ... N more is handled separately as elidedCount and is not turned into an ordinary repeated-frame count.

Structured output

The JSON view includes runtime, exceptions, causes, threads, frames, sourceLocations, unparsedLines, and parsing metadata. Frame records retain cleaned raw text and source-line numbers, plus parsed file, line, column, function, async, and repeat-count values where available. Quoted thread headers and Go goroutine N [state]: headers are recorded with their available identifiers and states.

The raw cleaned and normalized views come from the same parse result. Ticket output is plain text, Stack Overflow output uses a fenced text block, and JSON can be downloaded locally.

FAQ

How do I format a stack trace for Stack Overflow?

Paste the trace, review the normalized output, and choose Copy Stack Overflow format. The result is wrapped in a fenced text block for Markdown-safe display.

Can this parse Java, .NET, Node.js, Python, and Go traces?

Yes. It has pattern-based handling for Java, .NET, Node.js, Python, and Go, with a Generic fallback. Unusual, mixed, or incomplete input may produce a partial result and unparsed lines.

Does the tool upload or store my exception text?

No. Parsing, copying, and JSON preparation run locally in your browser. The page does not upload the pasted text.

What do Caused by, InnerException, or Python exception chaining mean here?

Java Caused by: and Suppressed: headers become child cause records. The parser preserves the .NET inner-exception boundary marker and recognizes Python traceback structure; it does not infer a root cause.

Why are some file names and line numbers missing?

The parser records locations only when they match a supported input pattern. Missing values are not invented, and lines that cannot be parsed remain available as raw or unparsed content.

What does ... N more mean in a Java stack trace?

It represents shared frames. The parser records the number as elidedCount without fabricating the omitted frames or treating them as ordinary repeated frames.

Can I export the normalized trace as JSON or a ticket-ready text block?

Yes. Use Download JSON for the structured representation, Copy ticket format for plain text, or Copy Stack Overflow format for a fenced text block.

Does this diagnose the error or resolve symbols?

No. This tool formats and normalizes pasted text only. It does not diagnose root cause, execute code, retrieve source data, or resolve symbols; malformed input is handled where possible and unknown lines are exposed separately.