.NET Stack Trace Cleaner

Turn a wall of exception text into the root cause and the line in your code that started it.

Runs locally · nothing uploaded
Exception text
Framework prefixes for "Only my code"

Comma or space separated. Frames whose full name starts with one of these count as framework code. Add your own shared libraries if you want them folded too.

What it does

Paste the output of exception.ToString() and the tool splits it into one card per exception: the outer exception, every ---> inner exception and each entry of an AggregateException. The innermost exception is marked as the root cause, and the first frame that belongs to your code is marked as the likely origin.

Features

  • Demystified async code: <GetOrderAsync>d__5.MoveNext() becomes async OrderService.GetOrderAsync(), <>c__DisplayClass0_0.<Main>b__0 becomes a named lambda, local functions get their real name. TaskAwaiter, ExecutionContext, ExceptionDispatchInfo frames and the --- End of stack trace from previous location --- markers are hidden. Hover a frame to see the original text.
  • Only my code: runs of framework frames fold into “n framework frames” expanders. The prefix list (System., Microsoft., Npgsql.…) is editable.
  • Accepts messy input: Serilog and Microsoft.Extensions.Logging output, CLEF / JSON log lines (@x), Application Insights exception JSON, traces with escaped \r\n, ASP.NET Core developer exception page text, .NET Framework and Mono formats.
  • File and line for each frame. Click it to copy path:line.
  • Export the cleaned trace as text or as Markdown ready for a GitHub or Azure DevOps issue.

How to use it

  1. Paste the exception, or open or drop a log file.
  2. Read the highlighted origin frame first, then expand framework frames only if you need them.
  3. Copy the cleaned text or Markdown into your ticket.

Privacy

Parsing happens in your browser and nothing is uploaded. Your last input and prefix list are kept in local storage; Clear removes the input.