Visual Studio デバッガーでのブレークポイントのトラブルシューティング

ブレークポイントの警告

デバッグ時のブレークポイントには 2 つの視覚的な状態があります。赤い円と白抜き (白の塗りつぶし) の円です。 デバッガーでターゲット プロセスにブレークポイントを正常に設定できている場合は、赤で塗りつぶされた円になります。 ブレークポイントが白抜きの円の場合は、ブレークポイントを設定しようとしたときにブレークポイントが無効であるか、警告が発生しています。 その違いを確認するには、ブレークポイントの上にマウス ポインターを移動し、警告が表示されているかどうかを調べます。

以下の 2 つのセクションでは、重要な警告とその修正方法について説明します。

"このドキュメントのシンボルが読み込まれていません"

[モジュール] ウィンドウ ( [デバッグ] > [ウィンドウ] > [モジュール] ) にアクセスし、モジュールが読み込まれているかどうかを確認します。

  • モジュールが読み込まれている場合は、 [シンボルの状態] 列をチェックして、シンボルが読み込まれているかどうかを確認します。

    • シンボルが読み込まれていない場合は、シンボルの状態を確認して問題を診断します。 モジュールのコンテキスト メニューの [モジュール] ウィンドウで、 [シンボルの読み込み情報] をクリックして、デバッガーがどこでシンボルを読み込もうとしたかを確認します。 シンボルの読み込みについては、Visual Studio デバッガーでのシンボル (.pdb) ファイルとソース ファイルの指定に関するページを参照してください。
    • シンボルが読み込まれている場合、PDB にソース ファイルに関する情報が含まれていません。 次のいくつかの原因が考えられます。
      • ソース ファイルが最近追加された場合は、モジュールの最新バージョンが読み込まれていることを確認します。
      • /PDBSTRIPPED リンカー オプションを使用して、ストリップされた PDB を作成することができます。 ストリップされた PDB にはソース ファイルの情報が含まれません。 ストリップされた PDB ではなく完全な PDB を使用していることを確認します。
      • PDB ファイルが部分的に破損しています。 ファイルを削除し、モジュールのクリーン ビルドを実行して問題の解決を試みてください。
  • モジュールが読み込まれていない場合は、次のことを確認して原因を見つけます。

    • 適切なプロセスをデバッグしていることを確認します。
    • 正しい種類のコードをデバッグしていることを確認します。 デバッガーがどのような種類のコードをデバッグするように構成されているかは、 [プロセス] ウィンドウ ( [デバッグ] > [ウィンドウ] > [プロセス] ) で確認できます。 たとえば、C# コードをデバッグする場合は、デバッガーが適切な種類とバージョンの .NET (たとえば、マネージド (v4*)、マネージド (v2*/v3*)、マネージド (CoreCLR)) 用に構成されていることを確認します。

"… 現在のソース コードは ... に組み込まれたバージョンとは異なっています"

ソース ファイルが変更され、ソースがデバッグ中のコードと一致しなくなった場合、デバッガーでは既定によりコードにブレークポイントが設定されません。 通常、この問題はソース ファイルが変更されたが、ソース コードがリビルドされなかった場合に発生します。 この問題を解決するには、プロジェクトをリビルドします。 ビルド システムでプロジェクトが最新の状態ではないにもかかわらず、既に最新の状態であると判断された場合は、ソース ファイルを再度保存するか、ビルドする前にプロジェクトのビルド出力をクリーニングすることで、プロジェクト システムで強制的にリビルドすることができます。

まれなシナリオとして、一致するソース コードがない状態でデバッグすることが必要になる場合があります。 一致するソース コードがない状態でデバッグすると、デバッグが複雑になる可能性があるため、この方法で進めることが希望に合っているかどうかを確認してください。

これらの安全性チェックを無効にするには、次のいずれかの操作を行います。

  • 1 つのブレークポイントを変更するには、エディターのブレークポイント アイコンの上にマウス ポインターを移動し、[設定] (歯車) アイコンをクリックします。 ピーク ウィンドウがエディターに追加されます。 ピーク ウィンドウの上部には、ブレークポイントの場所を示すハイパーリンクが表示されます。 ハイパーリンクをクリックしてブレークポイントの位置を変更できるようにし、 [元と異なるソース コードを許可する] をオンにします。
  • すべてのブレークポイントに対してこの設定を変更するには、 [デバッグ] > [オプションと設定] に移動します。 [デバッグ] / [全般] ページで、 [元のバージョンと完全に一致するソース ファイルを必要とする] オプションをオフにします。 デバッグが完了したら、必ずこのオプションを再度有効にしてください。

ブレークポイントは正常に設定されたが (警告なし)、ヒットしなかった

このセクションでは、デバッガーに警告が表示されていない場合の問題のトラブルシューティングに関する情報を示します。アクティブなデバッグ中、ブレークポイントは赤い円になっていますが、ブレークポイントはヒットしていません。

確認できることがいくつかあります。

  1. コードが複数のプロセスまたは複数のコンピューターで実行されている場合は、適切なプロセスまたはコンピューターをデバッグしていることを確認してください。
  2. コードが実行されていることを確認します。 コードが実行されているかテストするには、ブレークポイントを設定しようとしているコード行に System.Diagnostics.Debugger.Break (C# または VB) あるいは __debugbreak (C++) の呼び出しを追加してから、プロジェクトをリビルドします。
  3. 最適化されたコードをデバッグしている場合は、ブレークポイントが設定されている関数が、別の関数内にインライン化されていないことを確認してください。 前のチェックで説明した Debugger.Break テストは、この問題のテストにも使用できます。

ブレークポイントを削除したが、デバッグを再実行するとヒットし続ける

デバッグ中にブレークポイントを削除しても、次にデバッグを開始したときにブレークポイントが再びヒットすることがあります。 このブレークポイントのヒットを停止するには、ブレークポイントのすべてのインスタンスが [ブレークポイント] ウィンドウから削除されていることを確認します。