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

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

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

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

  1. コードが複数のプロセスまたは複数のコンピューターで実行されている場合は、適切なプロセスまたはコンピューターをデバッグしていることを確認してください。
  2. コードが実行されていることを確認します。 コードが実行されているかテストするには、ブレークポイントを設定しようとしているコード行に System.Diagnostics.Debugger.Break (C# または VB) あるいは __debugbreak (C++) の呼び出しを追加してから、プロジェクトをリビルドします。
  3. 最適化されたコードをデバッグしている場合は、ブレークポイントが設定されている関数が、別の関数内にインライン化されていないことを確認してください。 前のチェックで説明した Debugger.Break テストは、この問題のテストにも使用できます。
  4. 処理シナリオの場合は、適切な種類のコード (スクリプト コードと .NET Framework と .NET 5 以降など) をデバッグしていることを確認します。 調べるには、[プロセスにアタッチ] ダイアログ ボックスの [アタッチ先] オプションをチェックし、必要な場合は [選択] を選んでコードの種類を変更します。

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

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