Minified stack frame resolver

Paste a production stack trace and the matching source map. Every frame is resolved to its original file, line and column, twice: once with the minus one column correction and once without it, so you can see which frames a naive resolver answers wrongly.

Nothing is uploaded and nothing is downloaded. The map and the trace stay in this tab. No sourceMappingURL is followed, so the map has to be supplied by you.

Paste the trace exactly as you copied it. Lines that are not frames are listed back to you untouched.

Drop or pick a .map file, or paste the map JSON below. All three routes fill the same box.

or drop a file here

What the verdict column means

V8 reports a 1-based column. A source map stores 0-based generated columns, so the lookup has to search for the greatest generated column less than or equal to the reported column minus one. That minus one is the whole correction, and it is applied to the column before the search.

The corrected and uncorrected lookups diverge if and only if the map contains a mapping segment at a generated column exactly equal to the reported 1-based column. Landing exactly on a segment start is the safe case, not the failing one.

An uncorrected lookup overshoots and can land on the mapping segment for the following token. It can never land on an earlier one, because feeding a larger target column to a greatest-less-than-or-equal search returns the same segment or a later one.

The name column is the original identifier at the mapped token, taken from the map's names array. It does not name the enclosing function, and a frame can legitimately resolve with no name at all: a 4-field segment carries no name index, and this tool prints "no name in map" rather than substituting the minified identifier or borrowing a name from a nearby segment.