Visual Studio で JavaScript または TypeScript アプリをデバッグする
Visual Studio を使用して JavaScript と TypeScript コードをデバッグできます。 ブレークポイントにヒットしたり、デバッガーをアタッチしたり、変数を検査したり、呼び出し履歴を表示したり、他のデバッグ機能を使用したりできます。
ヒント
Visual Studio をまだインストールしていない場合は、Visual Studio のダウンロード ページに移動して無料でインストールします。
ヒント
Visual Studio をまだインストールしていない場合は、Visual Studio のダウンロード ページに移動して無料でインストールします。 Node.js アプリケーションを開発する場合は、Visual Studio で Node.js 開発ワークロード をインストールする必要があります。
デバッグの構成
Visual Studio 2022 .esproj プロジェクトの場合、Visual Studio Code は launch.json ファイルを使用してデバッガーを構成およびカスタマイズします。 launch.json はデバッガー構成ファイルです。
Visual Studio では、デバッガーはユーザー コードにのみアタッチされます。 .esproj プロジェクト 場合は、Visual Studio のユーザー コード (マイ コード 設定とも呼ばれます) を、launch.jsonの skipFiles
設定を使用して構成できます。 これは、VS Code の launch.json 設定と同じように動作します。 skipFiles およびその他のデバッガー構成オプションの詳細については、「不要なコードのスキップ」および「起動構成属性」を参照してください。
サーバー側スクリプトのデバッグ
Visual Studio でプロジェクトを開いた状態で、サーバー側の JavaScript ファイル (server.jsなど) を開き、余白をクリックしてブレークポイントを設定します。
ブレークポイントは、信頼性の高いデバッグの最も基本的で不可欠な機能です。 ブレークポイントは、Visual Studio で実行中のコードを中断する場所を示します。そのため、変数の値やメモリの動作、またはコードの分岐が実行されているかどうかを確認できます。
アプリを実行するには、F5([デバッグ>デバッグの開始])を押します。
デバッガーは、設定したブレークポイントで一時停止します (IDE では、黄色の背景でステートメントが強調表示されます)。 これで、現在スコープ内の変数にマウス ポインターを合わせ、デバッガー ウィンドウ (ローカル やウォッチ ウィンドウなど) を使用して、アプリの状態 調べることができます。
F5 押してアプリを続行します。
Chrome 開発者ツールを使用する場合は、Chrome ブラウザー F12 を押します。 これらのツールを使用すると、JAVAScript コンソールを使用して DOM を調べたり、アプリと対話したりできます。
クライアント側スクリプトのデバッグ
Visual Studio では、Chrome と Microsoft Edge に対してのみクライアント側デバッグのサポートが提供されます。 一部のシナリオでは、デバッガーは JavaScript と TypeScript コードのブレークポイントと HTML ファイルの埋め込みスクリプトに自動的にヒットします。
ASP.NET アプリでクライアント側スクリプトをデバッグする場合は、[ツール] >[オプション]>[デバッグ]、[ ASP.NET (Chrome、Edge、IE)の JavaScript デバッグを有効にする] を選択します。
Chrome Developer Tools または F12 Tools for Microsoft Edge を使用してクライアント側スクリプトをデバッグする場合は、この設定を無効にする必要があります。
詳細については、Google Chrome のこのブログ記事を参照してください。 ASP.NET Core での TypeScript のデバッグについては、「既存の ASP.NET Core アプリに TypeScript を追加する」を参照してください。
Node.js アプリケーションとその他の JavaScript プロジェクトについては、この記事で説明する手順に従ってください。
手記
ASP.NET と ASP.NET Core の場合、で埋め込みスクリプトをデバッグします。CSHTML ファイルはサポートされていません。 デバッグを有効にするには、JavaScript コードを別のファイルに含める必要があります。
デバッグ用にアプリを準備する
ソースが TypeScript や Babel などのトランスパイラーによって縮小または作成される場合は、ソース マップ を使用して、最適なデバッグ エクスペリエンスを実現します。 ソース マップを使用せずに、実行中のクライアント側スクリプトにデバッガーをアタッチすることもできます。 ただし、ソース ファイルではなく、縮小またはトランスパイルされたファイルでのみブレークポイントを設定およびヒットできる場合があります。 たとえば、Vue.js アプリでは、縮小されたスクリプトは文字列として eval
ステートメントに渡されます。ソース マップを使用しない限り、Visual Studio デバッガーを効果的に使用してこのコードをステップ 実行する方法はありません。 複雑なデバッグ シナリオでは、代わりに Chrome Developer Tools または F12 Tools for Microsoft Edge を使用できます。
ソース マップの生成に関するヘルプについては、「デバッグ用のソース マップの生成」参照してください。
デバッグ用にブラウザーを準備する
このシナリオでは、Microsoft Edge または Chrome を使用します。
ターゲット ブラウザー (Microsoft Edge または Chrome インスタンス) のすべてのウィンドウを閉じます。
他のブラウザー インスタンスでは、デバッグを有効にしてブラウザーを開くことができない可能性があります。 (ブラウザー拡張機能が実行されていて、完全デバッグ モードをインターセプトしている可能性があるため、Chrome または Edge の予期しないインスタンスを見つけて閉じるには、タスク マネージャーを開く必要がある場合があります)。
最良の結果を得るには、Microsoft Edge を使用している場合でも、Chrome のすべてのインスタンスをシャットダウンします。 どちらのブラウザーも同じ Chromium コード ベースを使用します。
デバッグを有効にしてブラウザーを起動します。
Visual Studio 2019以降では、デバッグ ツールバーから「ブラウズ方法」>を選択することで、ブラウザーの起動時に
--remote-debugging-port=9222
フラグを設定することができます。デバッグ ツール バーに Browse With... コマンドが表示されない場合は、別のブラウザーを選択してから、やり直してください。
[ブラウザーの選択] ダイアログ ボックスで [追加] を選択し、[引数] フィールドでフラグを設定します。 Edge デバッグ モードの や Chrome デバッグ モード など、ブラウザーに別のフレンドリ名を使用します。 詳細については、リリース ノートのを参照してください。
[参照] を選択して、ブラウザーを使用してデバッグ モードでアプリを起動します。
または、Windows の [ の開始] ボタンから コマンドを開き (右クリックして [実行]選択)、次のコマンドを入力します。
msedge --remote-debugging-port=9222
または、
chrome.exe --remote-debugging-port=9222
これにより、デバッグが有効な状態でブラウザーが起動します。
アプリはまだ実行されていないため、空のブラウザー ページが表示されます。 (Run コマンドを使用してブラウザーを起動する場合は、アプリ インスタンスの正しい URL を貼り付ける必要があります)。
クライアント側スクリプトにデバッガーをアタッチする
Visual Studio からデバッガーをアタッチし、クライアント側のコードでブレークポイントにヒットするには、正しいプロセスの特定に関するヘルプが必要です。 有効にする 1 つの方法を次に示します。
前のセクションで説明したように、アプリがデバッグ モードでブラウザーで実行されていることを確認します。
フレンドリ名を使用してブラウザー構成を作成した場合は、それをデバッグ ターゲットとして選択し、Ctrl キー +F5 (デバッグ>[デバッグなしで開始]) を押して、ブラウザーでアプリを実行します。
Visual Studio に切り替えて、ソース コードにブレークポイントを設定します。ブレークポイントは、JavaScript ファイル、TypeScript ファイル、JSX ファイルなどです。 (return ステートメントや var 宣言など、ブレークポイントを許可するコード行にブレークポイントを設定します)。
トランスパイルされたファイル内の特定のコードを検索するには、Ctrl +F (Edit>Find and Replace>Quick Find) を使用します。
クライアント側コードの場合、TypeScript ファイル、.vue、または JSX ファイル内のブレークポイントをヒットするには、通常、ソース マップを使用する必要があります。 Visual Studio でのデバッグをサポートするには、ソース マップを正しく構成する必要があります。
[デバッグ]>[プロセスにアタッチ]を選択します。
アドバイス
Visual Studio 2017 以降では、次の手順に従って初めてプロセスにアタッチした後、[デバッグ]>[プロセスに再アタッチ] を選択して、同じプロセスにすばやく再アタッチできます。
[プロセスへのアタッチ] ダイアログで、[接続の種類] として [JavaScript と TypeScript (Chrome Dev Tools/V8 Inspector)] を選択します。
デバッガー ターゲット (http://localhost:9222など) は、接続ターゲットの フィールドに表示されます。
ブラウザー インスタンスの一覧で、正しいホスト ポート (この例では
https://localhost:7184/
) を使用してブラウザー プロセスを選択し、[アタッチ] を選択します。ポート (7184 など) は、適切なブラウザー インスタンスを選択するのに役立つ タイトル フィールドにも表示される場合があります。
次の例は、これが Microsoft Edge ブラウザーを検索する方法を示しています。
ヒント
デバッガーがアタッチされず、"デバッグ アダプターを起動できませんでした" または "プロセスにアタッチできません" というメッセージが表示される場合。 操作は現在の状態では有効ではありません。デバッグ モードでブラウザーを起動する前に、Windows タスク マネージャーを使用してターゲット ブラウザーのすべてのインスタンスを閉じます。 ブラウザー拡張機能が実行されていて、完全なデバッグ モードが妨げている可能性があります。
ブレークポイントを含むコードが既に実行されている可能性があります。ブラウザー ページを更新します。 必要に応じて、ブレークポイントを持つコードを実行するアクションを実行します。
デバッガーで一時停止している間は、変数の上にマウス ポインターを置き、デバッガー ウィンドウを使用してアプリの状態を確認できます。 コード (F5、F10、F11 ) をステップ実行してデバッガーを進めることができます。 基本的なデバッグ機能の詳細については、「デバッガーのを最初に確認する」を参照してください。
アプリの種類、前に実行した手順、ブラウザーの状態などのその他の要因に応じて、トランスパイルされた
.js
ファイルまたはソース ファイルでブレークポイントにヒットする場合があります。 どちらの方法でも、コードをステップ実行して変数を調べることができます。TypeScript、JSX、または
.vue
ソース ファイル内のコードに分割する必要があり、それを行うことができない場合は、「トラブルシューティングの」セクションで説明されているように、環境が正しく設定されていることを確認してください。トランスパイルされた JavaScript ファイル (たとえば、app-bundle.js) 内のコードに分割する必要があり、それを行うことができない場合は、ソース マップ ファイル filename.js.mapを削除します。
Visual Studio からデバッガーをアタッチし、クライアント側のコードでブレークポイントにヒットするには、正しいプロセスの特定に関するヘルプが必要です。 有効にする 1 つの方法を次に示します。
前のセクションで説明したように、アプリがデバッグ モードでブラウザーで実行されていることを確認します。
フレンドリ名を使用してブラウザー構成を作成した場合は、それをデバッグ ターゲットとして選択し、Ctrl キー +F5 (デバッグ>[デバッグなしで開始]) を押して、ブラウザーでアプリを実行します。
Visual Studio に切り替えて、ソース コードにブレークポイントを設定します。ブレークポイントは、JavaScript ファイル、TypeScript ファイル、JSX ファイルなどです。 (return ステートメントや var 宣言など、ブレークポイントを許可するコード行にブレークポイントを設定します)。
トランスパイルされたファイル内の特定のコードを検索するには、Ctrl +F (Edit>Find and Replace>Quick Find) を使用します。
クライアント側コードの場合、TypeScript ファイル、.vue、または JSX ファイル内のブレークポイントをヒットするには、通常、ソース マップを使用する必要があります。 Visual Studio でのデバッグをサポートするには、ソース マップを正しく構成する必要があります。
[デバッグ]>[プロセスにアタッチ] の順に選びます。
ヒント
Visual Studio 2017 以降では、次の手順に従って初めてプロセスにアタッチした後、[デバッグ]>[プロセスに再アタッチ] を選択して、同じプロセスにすばやく再アタッチできます。
[プロセスにアタッチ] ダイアログで、アタッチできるブラウザー インスタンスのフィルター処理された一覧を取得します。 [アタッチ先] フィールドでターゲット ブラウザー用の適切なデバッガーとして [JavaScript (Chrome)] または [JavaScript (Microsoft Edge - Chromium)] を選び、フィルター ボックスに「chrome」または「edge」と入力して検索結果をフィルター処理します。
正しいホスト ポート (この例では
localhost
) を使用してブラウザー プロセスを選択し、アタッチを選択します。ポート (たとえば、1337) は、適切なブラウザー インスタンスを選択するのに役立つ タイトル フィールドにも表示される場合があります。
次の例は、これが Microsoft Edge ブラウザーを検索する方法を示しています。
アドバイス
デバッガーがアタッチされず、"デバッグ アダプターを起動できませんでした" または "プロセスにアタッチできません" というメッセージが表示される場合。 操作は現在の状態では有効ではありません。デバッグ モードでブラウザーを起動する前に、Windows タスク マネージャーを使用してターゲット ブラウザーのすべてのインスタンスを閉じます。 ブラウザー拡張機能が実行されていて、完全なデバッグ モードが妨げている可能性があります。
ブレークポイントを含むコードが既に実行されている可能性があります。ブラウザー ページを更新します。 必要に応じて、ブレークポイントを持つコードを実行するアクションを実行します。
デバッガーで一時停止している間は、変数の上にマウス ポインターを置き、デバッガー ウィンドウを使用してアプリの状態を確認できます。 コード (F5、F10、F11 ) をステップ実行してデバッガーを進めることができます。 基本的なデバッグ機能の詳細については、「デバッガーのを最初に確認する」を参照してください。
アプリの種類、前に実行した手順、ブラウザーの状態などのその他の要因に応じて、トランスパイルされた
.js
ファイルまたはソース ファイルでブレークポイントにヒットする場合があります。 どちらの方法でも、コードをステップ実行して変数を調べることができます。TypeScript、JSX、または
.vue
ソース ファイル内のコードに分割する必要があり、それを行うことができない場合は、「トラブルシューティングの」セクションで説明されているように、環境が正しく設定されていることを確認してください。トランスパイルされた JavaScript ファイル (たとえば、app-bundle.js) 内のコードに分割する必要があり、それを行うことができない場合は、ソース マップ ファイル filename.js.mapを削除します。
ブレークポイントとソース マップのトラブルシューティング
TypeScript または JSX ソースファイルのコードに入り込む必要があり、それができない場合は、前のセクションで説明したように、プロセスに接続 を使用してデバッガーをアタッチしてください。 環境が正しく設定されていることを確認します。
デバッグ モードでブラウザーを実行できるように、Chrome 拡張機能 (タスク マネージャーを使用) を含むすべてのブラウザー インスタンスを閉じます。
必ずデバッグモード でブラウザを起動してください。
ソース マップ ファイルにソース ファイルへの正しい相対パスが含まれていること、およびサポートされていないプレフィックス (webpack:///など) が含まれていないことを確認します。これにより、Visual Studio デバッガーでソース ファイルが見つかりません。 たとえば、webpack:///.app.tsx のような参照は、./app.tsx をするように修正できます。 これは、ソース マップ ファイル (テストに役立ちます) またはカスタム ビルド構成で手動で行うことができます。 詳細については、「デバッグ用のソース マップの生成」を参照してください。
または、ソース ファイル (たとえば、app.tsx ) でコードを分割する必要があり、実行できない場合は、ソース ファイルで debugger;
ステートメントを使用するか、代わりに Chrome 開発者ツール (または F12 Tools for Microsoft Edge) でブレークポイントを設定してください。
デバッグ用のソース マップを生成する
Visual Studio には、JavaScript ソース ファイルでソース マップを使用および生成する機能があります。 これは多くの場合、ソースが TypeScript や Babel などのトランスパイラーによって縮小または作成される場合に必要になります。 使用可能なオプションは、プロジェクトの種類によって異なります。
Visual Studio の TypeScript プロジェクトでは、既定でソース マップが生成されます。 詳細については、「tsconfig.json ファイルを使用してソース マップを構成する」を参照してください。
JavaScript プロジェクトでは、webpack などのバンドルと、プロジェクトに追加できる TypeScript コンパイラ (または Babel) などのコンパイラを使用してソース マップを生成できます。 TypeScript コンパイラの場合は、
tsconfig.json
ファイルを追加し、sourceMap
コンパイラ オプションを設定する必要もあります。 基本的な Webpack 構成を使用してこれを行う方法を示す例については、「React を使用して Node.js アプリを作成する」を参照してください。
手記
ソース マップを初めて使用する場合は、続行する前に「ソース マップとは?」をお読みください。
ソース マップの詳細設定を構成するには、TypeScript プロジェクトで tsconfig.json
またはプロジェクト設定を使用しますが、両方を使用することはできません。
Visual Studio を使用してデバッグを有効にするには、生成されたソース マップ内のソース ファイルへの参照が正しいことを確認する必要があります (テストが必要になる場合があります)。 たとえば、webpack を使用している場合、ソース マップ ファイル内の参照には webpack:/// プレフィックスが含まれています。これにより、Visual Studio で TypeScript または JSX ソース ファイルが見つかりません。 具体的には、デバッグ目的でこれを修正する場合、ソース ファイル (app.tsxなど) への参照を webpack:///./app.tsx のようなものから、デバッグを有効にする ./app.tsxなどに変更する必要があります (パスはソース ファイルからの相対パスです)。 次の例は、Visual Studio で動作するように、最も一般的なバンドルの 1 つである webpack でソース マップを構成する方法を示しています。
(Webpack のみ)(トランスパイルされた JavaScript ファイルではなく) JSX ファイルの TypeScript にブレークポイントを設定する場合は、webpack 構成を更新する必要があります。 たとえば、webpack-config.jsでは、次のコードを置き換える必要がある場合があります。
output: {
filename: "./app-bundle.js", // This is an example of the filename in your project
},
次のコードを使用します。
output: {
filename: "./app-bundle.js", // Replace with the filename in your project
devtoolModuleFilenameTemplate: '[absolute-resource-path]' // Removes the webpack:/// prefix
},
これは、Visual Studio でクライアント側コードのデバッグを有効にする開発専用の設定です。
複雑なシナリオでは、ブラウザー ツール (F12) は、カスタム プレフィックスを変更する必要がないため、デバッグに最適な場合があります。
tsconfig.json ファイルを使用してソース マップを構成する
tsconfig.json
ファイルをプロジェクトに追加すると、Visual Studio はディレクトリ ルートを TypeScript プロジェクトとして扱います。 ファイルを追加するには、ソリューション エクスプローラーでプロジェクトを右クリックし、[> 新しい項目の追加] > TypeScript JSON 構成ファイル 選択します。 次のような tsconfig.json
ファイルがプロジェクトに追加されます。
{
"compilerOptions": {
"noImplicitAny": false,
"module": "commonjs",
"noEmitOnError": true,
"removeComments": false,
"sourceMap": true,
"target": "es5"
},
"exclude": [
"node_modules"
]
}
tsconfig.json ファイルのコンパイラ オプション
- inlineSourceMap: ソース ファイルごとに個別のソース マップを作成するのではなく、ソース マップを含む 1 つのファイルを出力します。
- inlineSources: ソースマップと共にソースを1つのファイル内で生成します。inlineSourceMap または sourceMap を設定する必要があります。
- mapRoot: デバッガーが既定の場所ではなく、ソース マップ (.map) ファイルを検索する場所を指定します。 実行時
.map
ファイルが.js
ファイルとは異なる場所にある必要がある場合は、このフラグを使用します。 指定された場所は、デバッガーを.map
ファイルの場所に移動するために、ソース マップに埋め込まれます。 - sourceMap: 対応する
.map
ファイルを生成します。 - sourceRoot: デバッガーがソースの場所ではなく TypeScript ファイルを検索する場所を指定します。 実行時ソースがデザイン時の場所とは異なる場所にある必要がある場合は、このフラグを使用します。 指定された場所は、ソース ファイルが配置されている場所にデバッガーを誘導するために、ソース マップに埋め込まれます。
コンパイラ オプションの詳細については、「TypeScript ハンドブック」の「コンパイラ オプション」 ページを参照してください。
プロジェクト設定を使用してソース マップを構成する (TypeScript プロジェクト)
Visual Studio に含まれている TypeScript SDK を使用してビルドするプロジェクトの場合は、プロジェクトプロパティを使用してソース マップ設定を構成できます。プロジェクトを右クリックし、[プロジェクト > プロパティ] [TypeScript ビルド] > [デバッグ]> 選択します。
これらのプロジェクト設定を使用できます。
- ソース マップ の生成 (tsconfig.jsonの sourceMap と同じ): 対応する
.map
ファイルを生成します。 - ソース マップ のルート ディレクトリを指定します (tsconfig.jsonの mapRoot と同じ): デバッガーが生成された場所ではなくマップ ファイルを検索する場所を指定します。 実行時
.map
ファイルが.js
ファイルとは異なる場所にある必要がある場合は、このフラグを使用します。 指定された場所は、マップ ファイルが配置されている場所にデバッガーを誘導するために、ソース マップに埋め込まれます。 - TypeScript ファイルのルート ディレクトリを指定します (tsconfig.jsonの sourceRoot と同じです):デバッガーがソースの場所ではなく TypeScript ファイルを検索する場所を指定します。 実行時ソース ファイルがデザイン時の場所とは異なる場所にある必要がある場合は、このフラグを使用します。 指定された場所は、ソース ファイルが配置されている場所にデバッガーを誘導するために、ソース マップに埋め込まれます。
Razor を使用して動的ファイル内の JavaScript をデバッグする (ASP.NET)
Visual Studio 2022 では、ブレークポイントを使用して Razor ページをデバッグできます。 詳細については、「Visual Studioでのデバッグ ツールの使用」を参照してください。
Visual Studio 2019 以降、Visual Studio では Chrome と Microsoft Edge のみのデバッグ サポートが提供されています。
ただし、Razor 構文 (cshtml、vbhtml) で生成されたファイルのブレークポイントに自動的にヒットすることはできません。 この種のファイルをデバッグするには、次の 2 つの方法を使用できます。
を中断する
debugger;
ステートメントを配置します。このステートメントにより、動的スクリプトの実行が停止され、作成中すぐにデバッグが開始されます。ページを読み込み、Visual Studioで動的ドキュメントを開きます。デバッグ中に動的ファイルを開き、ブレークポイントを設定し、このメソッドが機能するようにページを更新する必要があります。 Chrome と Microsoft Edge のどちらを使用しているかに応じて、次のいずれかの方法でファイルが見つかります。
Chrome の場合は、ソリューション エクスプローラー > スクリプト ドキュメント > YourPageNameに移動します。
手記
Chrome を使用すると、"<スクリプト> タグの間にソースがありません" というメッセージが表示されることがあります。 問題ありません。デバッグを続行するだけです。
Microsoft Edge の場合は、Chrome と同じ手順を使用します。
詳細については、「Google Chromeでの ASP.NET プロジェクトのクライアント側デバッグ」を参照してください。