クラッシュ アナライザー ツール
クラッシュ アナライザー ツールを使用して、運用環境の Web アプリのクラッシュを分析して迅速に診断します。 クラッシュ アナライザー ツールでは、運用環境で収集した JavaScript スタック トレースを入力し、ソース マップを適用してスタック トレースを縮小解除し、デバッグを高速化できます。 クラッシュ アナライザー ツールを使用すると、縮小された JavaScript スタック トレースを取得し、迅速に後方に作業して、エラーの原因となったコード行を特定できます。
Web アプリが予期せずクラッシュまたはハングすると、データが失われ、ユーザーのエクスペリエンスが低下する可能性があります。 ユーザーが経験するクラッシュに関する情報を収集することは、クラッシュの根本原因を診断して修正するのに役立ちます。 ただし、運用環境で実行されているコードは、多くの場合、縮小されるため、クラッシュ時にログオンした JavaScript スタック トレースも縮小されます。 クラッシュ アナライザー ツールを使用すると、運用環境で収集された縮小されたスタック トレースを元のソース コードにマップし、クラッシュの根本原因をすばやく特定できます。
運用環境で Web アプリから収集する可能性がある縮小されたスタック トレースの例を次に示します。
Uncaught Error: test error
at https://microsoftedge.github.io/Demos/devtools-crash-analyzer/app/prod.bundle.js:1:1344
at t.render (https://microsoftedge.github.io/Demos/devtools-crash-analyzer/app/prod.bundle.js:1:1368)
at https://microsoftedge.github.io/Demos/devtools-crash-analyzer/app/prod.bundle.js:1:2278
at Array.map (<anonymous>)
at t.render (https://microsoftedge.github.io/Demos/devtools-crash-analyzer/app/prod.bundle.js:1:2252)
at new t (https://microsoftedge.github.io/Demos/devtools-crash-analyzer/app/prod.bundle.js:1:2063)
at https://microsoftedge.github.io/Demos/devtools-crash-analyzer/app/prod.bundle.js:1:2857
at https://microsoftedge.github.io/Demos/devtools-crash-analyzer/app/prod.bundle.js:1:2896
変数名と関数名は、多くの場合、上記の変数と同様に短縮 t
。 スクリプト URL は、上の prod.bundle.js
ファイルのように、ビルドされた 1 行バンドル ファイルを指すことがよくあります。
比較すると、元の変数名と関数名、元のソース ファイル名と行番号を含む、未確定のスタック トレースの例を次に示します。
Uncaught Error: test error
at shorten (util.ts:9:9)
at processUIString (util.ts:2:10)
at todoMarkupBuilder (todo.ts:35:41)
at Todo.render (todo.ts:24:12)
at app.ts:36:39
at Array.map (<anonymous>)
at App.render (app.ts:36:22)
at new App (app.ts:29:10)
at index.ts:9:13
at index.ts:9:33
クラッシュ アナライザー ツールで縮小された運用スタック トレースを分析するには、次の 2 つの手順があります。
最初に、運用環境で Web アプリから特別に書式設定されたスタック トレースを収集します。
ユーザーが使用しているブラウザーからスタック トレースを収集する方法は多数あります。 「 運用環境でスタック トレースを収集する」セクションでは、以下に例と推奨事項を示します。 また、 クラッシュ アナライザー ツールで分析できるようにスタック トレースを書式設定する方法についても説明します。
次に、 クラッシュ アナライザー ツールでスタック トレースを分析します。
以下の「 クラッシュ アナライザー ツールでスタック トレースを分析する」セクションでは、まず DevTools でソース マップにアクセスできるようにする方法と、 クラッシュ アナライザー ツールを使用してスタック トレースを分析する方法について説明します。
運用環境でスタック トレースを収集する
クラッシュ アナライザー ツールでは、スタック トレースは収集されません。 まず、使用可能なツールとサービスを使用して、Web アプリからスタック トレースを収集する必要があります。 運用環境でスタック トレースを収集する方法を次に示します。
JavaScript コードから未処理のエラーに関する情報をキャプチャできる Azure Monitor Application Insights などのテレメトリ システムを使用することをお勧めします。
JavaScript コードを記述して、Web アプリで未処理のエラーをキャプチャすることもできます。 次の例は、
window.onerror
イベント ハンドラーを使用して、Web アプリで未処理のエラーをキャプチャする方法を示しています。window.onerror = function (message, source, line, column, error) { // Get the stack trace from the error object. const stackTrace = error.stack; // Send the stack trace to your telemetry system. // Code not shown. };
クラッシュ アナライザー ツールのスタック トレースを書式設定する
運用環境でスタック トレースを収集するだけでは十分ではありません。 クラッシュ アナライザー ツールには、ソース モジュールというセクションを含めるためにスタック トレースが必要です。
[ ソース モジュール ] セクションを含むスタック トレースの例を次に示します。
Uncaught Error: test error
at https://microsoftedge.github.io/Demos/devtools-crash-analyzer/app/prod.bundle.js:1:1344
at t.render (https://microsoftedge.github.io/Demos/devtools-crash-analyzer/app/prod.bundle.js:1:1368)
at https://microsoftedge.github.io/Demos/devtools-crash-analyzer/app/prod.bundle.js:1:2278
at Array.map (<anonymous>)
at t.render (https://microsoftedge.github.io/Demos/devtools-crash-analyzer/app/prod.bundle.js:1:2252)
at new t (https://microsoftedge.github.io/Demos/devtools-crash-analyzer/app/prod.bundle.js:1:2063)
at https://microsoftedge.github.io/Demos/devtools-crash-analyzer/app/prod.bundle.js:1:2857
at https://microsoftedge.github.io/Demos/devtools-crash-analyzer/app/prod.bundle.js:1:2896
Source modules:
https://microsoftedge.github.io/Demos/devtools-crash-analyzer/app/prod.bundle.js 8b544e37b35d920a39d0e10f70fddc29b25d0db362741f3071eff86cef8613e9
[ ソース モジュール ] セクションには、スタック トレースに含まれる JavaScript ファイルの URL と、各ファイルのコンテンツのハッシュが含まれています。 ハッシュは、実行されているスクリプトの SHA-256 ハッシュに対応する 16 進文字の 64 文字の文字列です。 これは、各 JavaScript ファイルのコンテンツのバイト単位のハッシュです。 URL とハッシュを使用すると、 クラッシュ アナライザー ツールは、スタック トレースの縮小解除に使用されたソース マップを後で取得できます。
エラー スタック トレースに [ソース モジュール ] セクションを追加するには、次のように、Web アプリの Edge DevTools Crash Analyzer サポート ライブラリを使用します。
npm を使用して、Edge DevTools Crash Analyzer サポート ライブラリをプロジェクトに追加します。
npm install @microsoft/edge-devtools-crash-analyzer-support
JavaScript コードでライブラリをインポートし、
installErrorStackModuleAnnotations
関数を呼び出します。import { installErrorStackModuleAnnotations } from '@microsoft/edge-devtools-crash-analyzer-support'; installErrorStackModuleAnnotations(Error);
クラッシュ アナライザー ツールでスタック トレースを分析する
DevTools の クラッシュ アナライザー ツールは、運用環境のユーザーから収集した特別に書式設定されたスタック トレースをミニフィズ解除します。 ソース マップに元のソース コードも含まれている場合、 クラッシュ アナライザー ツールには、スタック トレースを構成する元のファイル名と関数名が表示されます。
DevTools でソース マップにアクセスできるようにします
クラッシュ アナライザー ツールは、スタック トレース内のソース モジュール情報を使用して、スタック トレース内のスクリプト ファイルに対応するソース マップを取得します。 つまり、まず DevTools でソース マップにアクセスできるようにする必要があります。
ソース マップが Azure Artifacts シンボル サーバーを使用して安全に格納されている場合は、 クラッシュ アナライザー ツールが最適です。 これは、DevTools がエラーを分析するときに、必要に応じて Azure Artifacts シンボル サーバーからソース マップを取得できるためです。 「ソース マップを Azure Artifacts シンボル サーバーに発行して元のコードを安全にデバッグする」を参照してください。
Azure Artifacts シンボル サーバーを使用していない場合でも、スタック トレースに対応するソース マップに DevTools からアクセスできることを確認することで、 クラッシュ アナライザー ツールを使用できます。 たとえば、 //# sourceMappingURL=
コメントを使用してソース マップを以前に読み込んだ場合、DevTools は後で再利用できるようにソース マップをキャッシュします。 詳細については、「デバッグのために、処理されたコードを元のソース コードにマップする」の「DevTools のソース マップ」を参照してください。
ドメイン名が localhost
されている場合、DevTools はソース マップをキャッシュしません。 つまり、Azure Artifacts Symbol Server を使用していない場合、 クラッシュ アナライザー ツールは、 localhost
ドメインを使用するローカル開発環境からではなく、運用環境から収集されたスタック トレースに対してのみ機能します。
クラッシュ アナライザー ツールを開く
クラッシュ アナライザー ツールはクイック ビュー ツールです。既定では、クイック ビュー パネルで開き、アクティビティ バーで開いている他のツールと共に使用できます。
[その他のツール] メニューから
DevTools の [その他のツール] メニューを使用してクラッシュ アナライザー ツールを開くには:
Microsoft Edge で、[ 設定] などを 選択します () >その他のツール>開発者ツールを開きます (Ctrl + Shift + I (Windows、Linux) または Command + Option + I (macOS))。 DevTools が開きます。
DevTools で Esc キーを押して、下部にある クイック ビュー ツール バーを開きます (まだ開いていない場合)。 クイック ビュー ツール バーで、[その他のツール] () ボタンをクリックし、[クラッシュ アナライザー] を選択します。
コマンド メニューから
コマンド メニューを使用して クラッシュ アナライザー ツールを開くには:
Microsoft Edge で、[ 設定] などを 選択します () >その他のツール>開発者ツールを開きます (Ctrl + Shift + I (Windows、Linux) または Command + Option + I (macOS))。 DevTools が開きます。
DevTools で、[ DevTools のカスタマイズと制御 ] () ボタンをクリックし、[ コマンドの実行] を選択します。 または、DevTools にフォーカスがある場合は、 Ctrl + Shift + P (Windows、Linux) または Command + Shift + P (macOS) を押します。 [コマンド] メニューが開きます。
クラッシュ アナライザーの入力を開始し、[クラッシュ アナライザーの表示] [クイック ビュー] コマンドを選択します。 クイック ビュー パネルでクラッシュ アナライザー ツールが開きます。
クラッシュ アナライザー ツールにスタック トレースを入力する
クラッシュ アナライザー ツールをテストするが、分析するスタック トレースがない場合は、次の手順に従ってサンプル スタック トレースを収集します。
Microsoft Edge で、新しいウィンドウまたはタブで DevTools クラッシュ アナライザーのデモ を開きます。
DevTools を開く場合は、Web ページを右クリックし、[検査] を選択します。 または、 Ctrl + Shift + I (Windows、Linux) または Command + Option + I (macOS) を押します。 DevTools が開きます。
DevTools の アクティビティ バーで、 コンソール () をクリックします。 コンソール ツールが開きます。
コンソール ツールに表示されているエラー スタック トレースを選択し、コピーします。
DevTools で クラッシュ アナライザー ツールを使用するには:
上記の 「クラッシュ アナライザー ツールを開く」の説明に従って、DevTools の クラッシュ アナライザー ツールを開きます。
クラッシュ アナライザー ツールの左側のウィンドウに、特別に書式設定されたスタック トレースを入力します。
クラッシュ アナライザー ツールで、[分析] () ボタン (または Ctrl + Enter キーを押します) をクリックします。
右側のウィンドウには、スタック トレースを構成する元のファイル名と関数名が表示されます。
これにより、ソース モジュールに対応するソース マップが読み込まれ、ソース マップに JavaScript または TypeScript ソース コンテンツが含まれていたスタック フレームの縮小解除が試行されます。
ソース コードがフレームのソース マップで使用できる場合は、フレームをクリックしてソース コードを表示します。
元のソース コードが [ソース ] ツールに表示され、問題の行が強調表示されています。
未確定のスタック トレースをコピーするには、[ クラッシュ アナライザー ] タブのツール バーの [未 確定のスタック トレースをコピー する] ([未確定の) ボタンをクリックします。 関数名、ソース ファイル名、行番号、列番号など、元のコードと一致する情報を除き、従来のスタック トレース形式のスタック トレースとして、完全な未確定のスタック トレースが生成され、クリップボードにコピーされます。
Uncaught Error: test error
at shorten (webpack://devtools-crash-analyzer/src/util.ts:9:9)
at processUIString (webpack://devtools-crash-analyzer/src/util.ts:2:10)
at anonymous callback to [computed property].todos.map (webpack://devtools-crash-analyzer/src/app.ts:36:39)
at Array.map (<anonymous>)
at anonymous callback to [computed property].todos.map (webpack://devtools-crash-analyzer/src/app.ts:36:22)
at constructor for App (webpack://devtools-crash-analyzer/src/app.ts:29:10)
at [Global code: "webpack://devtools-crash-analyzer/src/index.ts"] (webpack://devtools-crash-analyzer/src/index.ts:9:13)
at (anonymous function) (https://microsoftedge.github.io/Demos/devtools-crash-analyzer/app/prod.bundle.js:2:2897)
UI 機能
クラッシュ アナライザー ツールには、次の UI 機能があります。
UI 項目 | 説明 |
---|---|
左側のウィンドウ | 分析するスタック トレース。 |
右側のウィンドウ | スタック トレースを構成する元のファイル名と関数名を表示します。 |
[新しい分析] () ボタン | 新しいスタック トレースを貼り付けるために、新しい空白の左ペインを作成します。 |
[分析] () ボタン | 左側のウィンドウのスタック トレースに基づいて、右側のウィンドウに新しい分析を作成します。 |
[分析] ドロップダウン ) | 分析の一覧を表示します。 |
[ この分析 を削除) ボタン | 現在の分析を削除します。 |
[未確定のスタック トレース) ボタン | 関数名、ソース ファイル名、行番号、列番号など、元のコードに一致する情報を除き、従来のスタック トレース形式のスタック トレースとして、完全な未確定のスタック トレースを生成してクリップボードにコピーします。 |
[ シンボル サーバーを開く] 設定 () ボタン | Azure Artifacts シンボル サーバーの設定を表示または変更します。 |
[ 使用方法] () ボタン | 現在の記事を開きます。 |
フィードバックの提供
MicrosoftEdge/DevTools フィードバック リポジトリにフィードバックを残し、正常に動作するもの、そうでないもの、そのような機能に対して何が必要かをお知らせください。
関連項目
- ソース マップを Azure Artifacts シンボル サーバーに発行して、元のコードを安全にデバッグする
- 「DevTools のソース マップ」で、デバッグのために、処理されたコードを元のソース コードにマップします。
外部リンク:
- DevTools クラッシュ アナライザーのデモ
- MicrosoftEdge/ DevTools - フィードバック リポジトリ。
- Azure Monitor ドキュメントの Azure Monitor Application Insights 。
- Edge DevTools Crash Analyzer サポート - npm パッケージ。