Source Mapスタックトレース復元
Source Map v3 の.mapファイルとスタックトレースを入力し、app.min.js:1:24050 のような圧縮後のエラー位置を、元のソースファイルの行・列に対応付けるツールです。sourcesContentが含まれる場合は該当箇所のソースも表示します。外部のMapやソースを取得せず、すべてブラウザ内で処理されます。
対象は Source Map v3 の単一のMap(sections を持つインデックスMapは対象外)です。Chrome・Edge(at fn (url:行:列))と Firefox・Safari(fn@url:行:列)のスタックトレース形式に対応しています。
Mapに file の指定がないため、すべてのフレームをこのMapで復元します。
復元結果
Source Mapとスタックトレースを入力すると、元のソースの位置が表示されます。
使い方
- 左に.mapファイルの内容を貼り付けるか、ファイルを読み込みます。
- 右に本番環境などで記録されたスタックトレースを貼り付けます。
- 必要に応じて生成済みJavaScriptのファイル名を指定します。省略するとMapの file の値を使います。
- フレームごとに元のファイル名・行・列と、該当箇所のソースが表示されます。結果はコピーできます。
このツールについて
本番環境のJavaScriptは圧縮されているため、エラーの位置が app.min.js:1:24050 のように表示され、どのコードで発生したか分かりません。ビルド時に生成したSource Mapを使えば、元のソースファイルの位置に戻せます。
ブラウザのスタックトレースの行・列は1始まりですが、Source Mapの内部表現では列が0始まりです。このツールは基準の違いを変換して位置ずれを防ぎ、0始まりの列番号を出力するツール向けの切り替えも用意しています。対応付けできないフレームや別ファイルのフレームは、元の行をそのまま残して理由を表示します。
初期版は分割されていない単一のMapが対象で、sections を持つインデックスMapには対応していません。sourcesContentがない場合も位置の復元は利用できます。Mapやスタックトレースがサーバーへ送信されることはありません。
Mapに {"version":3,"file":"app.js","sources":["src/main.ts"],"names":[],"mappings":"AAAA"}、スタックに at fn (app.js:1:1) を入力し、列を1始まりにすると、src/main.tsの1行1列へ復元されます。この例は位置だけを含み、元ソース本文の表示はありません。
本番ファイルとMapは同じビルドの組み合わせを使ってください。古いMapでも読み込み自体はできるため、対応しない版では結果の位置を信頼できません。外部のソースやMapを取得する機能はなく、貼り付けた資料をブラウザ内で照合します。
よくある質問
どのブラウザのスタックトレースに対応していますか?
Chrome・Edge(at fn (url:行:列))と Firefox・Safari(fn@url:行:列)の形式に対応しています。
復元した位置が1文字ずれます。
列番号の基準が合っていない可能性があります。ブラウザのスタックトレースは1始まりです。0始まりで出力するツールの場合は、基準を切り替えてください。
Source Mapを公開せずに使えますか?
はい。Mapはブラウザ内だけで読み込まれ、サーバーへ送信されることはありません。