Visual Studio デバッガーでのブレークポイントのトラブルシューティング
適用対象: Visual Studio
ブレークポイントの警告
デバッグ時に、 breakpoint には、次の 2 つの表示状態が考えられます。
- 赤色の実線の円。デバッガーにより、ターゲット プロセスにブレークポイントを正常に設定できた場合です。
- ブレークポイントが無効になっているか、ブレークポイントを設定しようとしたときに警告が発生した場合、空の円 (テーマに応じて濃い灰色または白が塗りつぶされます)。
その違いを確認するには、ブレークポイントの上にマウス ポインターを移動し、警告が表示されているかどうかを調べます。 以下の 2 つのセクションでは、重要な警告とその修正方法について説明します。
"このドキュメントのシンボルが読み込まれていません"
デバッグ時に Debug>Windows>Modules に移動し、モジュールが読み込まれているかどうかを確認します。
- モジュールが読み込まれている場合は、 [シンボルの状態] 列をチェックして、シンボルが読み込まれているかどうかを確認します。
シンボルが読み込まれていない場合は、シンボルの状態を確認して問題を診断します。
Modules ウィンドウで、シンボルが読み込まれていないモジュールを右クリックし、Symbol Load Information... を選択します。
シンボルの読み込みについては、Visual Studio デバッガーでのシンボル (.pdb) ファイルとソース ファイルの指定に関するページを参照してください。
シンボルが読み込まれている場合、PDB にソース ファイルに関する情報が含まれていません。 考えられる原因:
- ソース ファイルが最近追加された場合は、モジュールの最新バージョンが読み込まれていることを確認します。
- /PDBSTRIPPED リンカー オプションを使用して、ストリップされた PDB を作成することができます。 ストリップされた PDB にはソース ファイルの情報が含まれません。 ストリップされた PDB ではなく完全な PDB を使用していることを確認します。
- PDB ファイルが部分的に破損しています。 ファイルを削除し、モジュールのクリーン ビルドを実行して問題の解決を試みてください。
- モジュールが読み込まれていない場合は、次のことを確認して原因を見つけます。
- 適切なプロセスをデバッグしていることを確認します。
- 正しいコードをデバッグしていることを確認します。 デバッガーがどのような種類のコードをデバッグするように構成されているかは、 [プロセス] ウィンドウ ( [デバッグ]>[ウィンドウ]>[プロセス] ) で確認できます。 たとえば、C# コードをデバッグする場合は、デバッガーが適切な種類とバージョンの .NET (たとえば、マネージド (v4*)、マネージド (v2*/v3*)、マネージド (CoreCLR)) 用に構成されていることを確認します。
"… 現在のソース コードは ... に組み込まれたバージョンとは異なっています"
ソース ファイルが変更され、ソースがデバッグ中のコードと一致しなくなった場合、デバッガーでは既定によりコードにブレークポイントが設定されません。 通常、この問題はソース ファイルが変更されたが、ソース コードがリビルドされなかった場合に発生します。 この問題を解決するには、プロジェクトをリビルドします。 プロジェクトが最新ではないにもかかわらず、ビルド システムによって既に最新だと認識された場合は、プロジェクト システムを強制的にリビルドすることができます。 プロジェクトをリビルドするには、ソース ファイルを再度保存するか、ビルドの前にビルド出力をクリーンします。
まれなシナリオとして、一致するソース コードがない状態でデバッグすることが必要になる場合があります。 一致するソース コードがない状態でデバッグすると、デバッグが複雑になる可能性があるため、進め方を確認してください。
これらの安全性チェックを無効にするには、いずれかのオプションに従います。
- 1 つのブレークポイントを変更するには、エディターのブレークポイント アイコンの上にマウス ポインターを移動し、[設定] (歯車) アイコンを選びます。 ピーク ウィンドウがエディターに追加されます。 ピーク ウィンドウの上部には、ブレークポイントの場所を示すハイパーリンクが表示されます。 ハイパーリンクをクリックしてブレークポイントの位置を変更できるようにし、 [元と異なるソース コードを許可する] をオンにします。
- すべてのブレークポイントに対してこの設定を変更するには、 [デバッグ]>[オプションと設定] に移動します。 [デバッグ] / [全般] ページで、 [元のバージョンと完全に一致するソース ファイルを必要とする] オプションをオフにします。 デバッグが完了したら、必ずこのオプションを再度有効にしてください。
ブレークポイントは正常に設定されたが (警告なし)、ヒットしなかった
このセクションでは、デバッガーに警告が表示されていない場合の問題のトラブルシューティングに関する情報を示します。アクティブなデバッグ中、ブレークポイントは赤い円になっていますが、ブレークポイントはヒットしていません。
確認できることがいくつかあります。
- コードが複数のプロセスまたは複数のコンピューターで実行されている場合は、適切なプロセスまたはコンピューターをデバッグしていることを確認してください。
- コードが実行されていることを確認します。 コードが実行されているかテストするには、ブレークポイントを設定しようとしているコード行に
System.Diagnostics.Debugger.Break
(C# または VB) あるいは__debugbreak
(C++) の呼び出しを追加してから、プロジェクトをリビルドします。 - 最適化されたコードをデバッグしている場合は、ブレークポイントが設定されている関数が、別の関数内にインライン化されていないことを確認してください。 前のチェックで説明した
Debugger.Break
テストは、この問題のテストにも使用できます。 - 処理シナリオの場合は、適切な種類のコード (スクリプト コードと .NET Framework と .NET 5 以降など) をデバッグしていることを確認します。 調べるには、[プロセスにアタッチ] ダイアログ ボックスの [アタッチ先] オプションをチェックし、必要な場合は [選択] を選んでコードの種類を変更します。
ブレークポイントを削除したが、デバッグを再実行するとヒットし続ける
デバッグ中にブレークポイントを削除しても、次にデバッグを開始したときにブレークポイントが再びヒットすることがあります。 このブレークポイントのヒットを停止するには、ブレークポイントのすべてのインスタンスが [ブレークポイント] ウィンドウから削除されていることを確認します。