このドキュメントでは、Visual Studio のデバッグ機能についてよく寄せられる問題に対処しています。 また、デバッグに関わるタスクや問題を Visual Studio デバッガーの関連機能にマップします。 これらのリンクは、マルチスレッド アプリケーションのデバッグ、コードのナビゲーション、メモリ リーク、変数の検査、ブレークポイントの使用、外部コードのデバッグなどのタスクや問題を網羅しています。 デバッガーの機能の概要が必要な場合は、代わりに「デバッガーでのはじめに」を参照してください。
ブレークポイント
バグが含まれている可能性のあるコード行を調べるために実行中のコードを一時停止するにはどうすればよいですか?
ブレークポイントの設定。 詳細については、「ブレークポイントの使用」を参照してください。
変数に予期しない値が含まれていますか。 または、特定の状態に達したときにアプリを検査する必要がありますか?
条件付きブレークポイントを設定し、条件付きロジックを使用してブレークポイントをアクティブにする場所とタイミングを制御します。 ブレークポイントを右クリックして条件を追加します。 変数が予期しない値と等しいときに条件が true になるように設定します。
詳細については、「ブレークポイント条件」を参照してください。
コードの変更や停止を行うことなく、構成可能な条件の下で出力ウィンドウに情報を記録するにはどうすればよいですか?
トレースポイントを使用すると、コードの変更や停止を行うことなく、構成可能な条件の下で出力ウィンドウに情報を記録できます。
変数の値が変更されるタイミングを知るにはどうすればよいですか?
C++ の場合は、データ ブレークポイントを設定します。
.NET Core 3 を使用しているアプリでも、データ ブレークポイントを設定できます。
C# と F# の場合に限り、条件付きブレークポイントを使用してオブジェクト ID を追跡することができます。
別のブレークポイントにヒットした場合、実行を中断するにはどうすればよいですか?
別のブレークポイントが最初にヒットした場合にのみ実行が中断される依存ブレークポイントを設定します。 詳細については、依存ブレークポイントに関する記事を参照してください。
ブレークポイントにヒットできるのは 1 回だけですか?
コードを 1 回だけ中断できる一時ブレークポイントを設定します。 詳細については、一時ブレークポイントに関する記事を参照してください。
ループ内で特定の反復においてコードを一時停止できますか?
別のブレークポイントが最初にヒットした場合にのみ実行が中断される依存ブレークポイントを設定します。 詳細については、ヒット カウントに関するページを参照してください。
名前はわかるが位置がわからない関数の開始時にコードを一時停止するにはどうすればよいですか?
これを行うには、関数のブレークポイントを使用します。 詳細については、「関数のブレークポイントを設定する」を参照してください。
同じ名前の複数の関数の先頭でコードを一時停止するにはどうすればよいですか?
同じ名前を持つ複数の関数がある場合は (オーバーロードされた関数、または異なるプロジェクトの関数)、関数のブレークポイントを使用できます。
ブレークポイントを管理して追跡する
[ブレークポイント] ウィンドウを使用します。 詳細については、ブレークポイントの管理に関するページを参照してください。
特定の処理された例外または未処理の例外がスローされたときにコードを一時停止してデバッグ
エラーが発生した場所は例外ヘルパーで示されますが、特定のエラーで一時停止してデバッグしたい場合は、例外がスローされたときに中断するようデバッガーに指示することができます。
呼び出し履歴からブレークポイントを設定
[呼び出し履歴] ウィンドウで実行フローを調べたり関数を表示したりしているときにコードを一時停止してデバッグする場合は、「[呼び出し履歴] ウィンドウでブレークポイントを設定する」を参照してください。
特定のアセンブリ命令でコードを一時停止
これを行うには、[逆アセンブリ] ウィンドウでブレークポイントを設定します。
コード間の移動
デバッグ中にコードをステップ実行するためのコマンドを学習するにはどうすればよいですか?
詳細については、デバッガーでのコード間の移動に関するページを参照してください。
ブレークポイントを削除したり無効にしたりせずに、ブレークポイントをスキップしながら特定の行に対してコードを実行することはできますか?
これらのシナリオでは、"カーソル行の前まで実行" を使用できます。 ブレークポイントはそのままの状態で、デバッガーがカーソルがあるコード行に到達するまでブレークポイントをスキップします。 また、発生する可能性のある初回例外のブレーク条件もスキップします。 詳細については、デバッガーでのコード間の移動に関するページを参照してください。
コード行に異なるメソッドの呼び出しがある場合、特定のメソッドにステップインできますか?
コード行を右クリックすると、コンテキスト メニューが表示され、[関数にステップ イン] を選択できます。 これにより、ステップ インできるすべてのメソッドの一覧が表示されます。 これで目的のメソッドを選択できます。
データの検査と可視化
アプリの実行中に変数の値を確認するにはどうすればよいですか?
変数をポイントしてデータ ヒントを使用するか、または [自動変数] ウィンドウと [ローカル] ウィンドウで変数を調べます。
特定の変数の値の変化を観察することはできますか?
変数にウォッチを設定します。 詳細については、変数へのウォッチの設定に関するページを参照してください。
長すぎてデバッガー ウィンドウに収まらない文字列を表示するにはどうすればよいですか?
文字列ビジュアライザーには、データ ヒントまたはデバッガー ウィンドウに対して長すぎる文字列が表示されます。 また、形式に誤りがある文字列を識別するのにも役立ちます。
Visual Studio の組み込みの文字列ビジュアライザーには、テキスト、XML、HTML、JSON の各オプションが含まれています。大きなコレクション オブジェクトを表示するにはどうすればよいですか?
DataSet ビジュアライザーを使うと、DataSet、DataTable、DataView、または DataViewManager の内容を表示できます。 IEnumerable ビジュアライザーを使用すると、配列、リストなどのオブジェクトを表示できます。詳細については、「表形式ビジュアライザー」 を参照してください。
既に実行されているアプリをデバッグする
ローカルまたはリモート コンピューター上で実行中のアプリをデバッグする、複数のプロセスを同時にデバッグする、Visual Studio で作成されていないアプリをデバッグする、Visual Studio から起動しなかった任意のアプリをデバッグするには、どうすればよいですか?
実行中のプロセスへのアタッチに関するページを参照してください。
同じアプリケーションに繰り返しアタッチするにはどうすればよいですか?
[プロセスに再アタッチする] (Shift + Alt + P) を使用すると、毎回 [プロセスにアタッチする] ダイアログを経由することなく、ワンクリックでアプリケーションのデバッグを簡単に開始できます。 プロセスへの再アタッチに関する記事を参照してください
マルチスレッド アプリケーションのデバッグ
マルチスレッド アプリケーションをデバッグするにはどうすればよいですか? それとも、アプリケーションがハング状態ですか?
トラブルシューティングの詳細については、[並列スタック] ウィンドウに関する記事を参照してください
関数が呼び出された順序を表示するにはどうすればよいですか?
呼び出し履歴の表示方法に関するページを参照してください。
メモリの分析
アプリケーションにメモリ リークが発生していますか?
さらにトラブルシューティングを行うには、スナップショットを取り、メモリ ツールで開きます。 メモリ使用量の測定に関する記事を参照してください。
ネイティブ アプリケーションまたはマネージド アプリケーションのメモリ使用量を分析するにはどうすればよいですか?
ライブ デバッグ、ヒープ ダンプ、またはパフォーマンス プロファイラーを介して、Visual Studio メモリ ツールを使用します。
「メモリ分析ツールを選択する」を参照してください。デバッガーをアタッチせずにネイティブ アプリケーションまたはマネージド アプリケーションのメモリ使用量を分析するにはどうすればよいですか? メモリ使用量ツールを有効にして、Visual Studio パフォーマンス プロファイラーを使用します。
メモリ使用量の分析に関する記事を参照してください。2 つの時点のメモリ使用量を比較することはできますか?
差分機能を使用して、メモリ ツールのスナップショットを比較するか、2 つのヒープ ダンプを比較します。 メモリ使用量の分析に関する記事を参照してください。
外部コードのデバッグ
デバッグ中に表示するのをユーザー コードのみにすることはできますか?
"マイ コードのみ" は Visual Studio のデバッグ機能であり、システム、フレームワーク、およびその他の非ユーザー コードに呼び出しを自動的にステップ オーバーします。 [呼び出し履歴] ウィンドウでは、"マイ コードのみ" によってこれらの呼び出しが [外部コード] フレームに折りたたまれます。 「"マイ コードのみ" を使用してユーザー コードのみをデバッグする」を参照してください
プログラムで実行されている未加工のアセンブリの命令を表示またはデバッグするにはどうすればよいですか?
[デバッグ] > [Windows] > [逆アセンブリ] から [逆アセンブル ウィンドウ] を使用します。 一度に 1 つの命令をステップ オーバーしたり、アセンブリの個々の命令にブレークポイントを設定したりできます。
.NET ライブラリのソース コードを確認することはできますか?
[デバッグ] > [オプション] > [シンボル] から Microsoft シンボル サーバーを有効にし、.NET ライブラリのシンボルとソースをダウンロードします。 シンボルの指定に関する記事を参照してください
特定または共有の場所またはサーバーから PDB を読み込むにはどうすればよいですか?
[デバッグ] > [オプション] > [シンボル] からお使いのシンボル サーバーを構成します。 シンボルの指定に関する記事を参照してください
特定の PDB が絶対に読み込まれないようにするにはどうすればよいですか? あるいは、常に読み込まれるようにするにはどうすればよいですか?
[デバッグ] > [オプション] > [シンボル] で対象リストと除外リストを構成します。
シンボルの指定に関する記事を参照してください
デバッグを構成する
デバッガーの設定を構成するにはどうすればよいですか?
デバッガーのオプションおよびデバッガー プロジェクトの設定を構成するには、「デバッガーの設定と準備」を参照してください。
デバッガーに表示される情報をカスタマイズするにはどうすればよいですか?
さまざまなデバッガー ウィンドウの値として、オブジェクトの型以外の情報を表示したいことがあります。 C#、Visual Basic、F#、C++/CLI のコードの場合は、DebuggerDisplay 属性を使用します。 さらに詳細なオプションについては、カスタム ビジュアライザーを作成して UI をカスタマイズすることもできます。 ネイティブ C++ の場合は、NatVis フレームワークを使用します。
追加のタスク
ダンプを保存する必要はありますか?
デバッグ中にエラーまたはブレークポイントで停止したときに、[デバッグ] > [名前を付けてダンプを保存] の順に選択します。 ダンプ ファイルの使用に関する記事を参照してください
ダンプ ファイル分析するにはどうすればよいですか?
Visual Studio で [ファイル] > [開く] を選んでダンプを開きます。 デバッグを開始するには、[Debug with Managed Only]\(マネージドのみでデバッグ\)、[ネイティブのみでデバッグ]、[混合でデバッグ]、または [Debug with Managed Memory]\(マネージド メモリでデバッグ\) を選択します。 ダンプ ファイルの使用に関する記事を参照してください
デバッグ セッションの間にコードを編集することはできますか?
エディット コンティニュに関するページを参照してください。 XAML の場合は、XAML ホット リロードを使用します。
リモート コンピューター上でデバッグするにはどうすればよいですか?
「Remote debugging」(リモート デバッグ) を参照してください。
パフォーマンスの問題を修正するにはどうすればよいですか?
「プロファイリング ツールの概要」を参照してください
例外を修正するにはどうすればよいですか?
「例外を修正する」を参照してください。