ブレークポイントとトレースポイントの使用

ソース行、アセンブリ命令、および呼び出し履歴の関数のブレークポイントを設定します。 条件、ヒット カウント、および実行位置を指定します。 トレースポイントで出力します。 ブレークポイントを保存およびインポートします。

内容

Create breakpoints that break when you want

Set a breakpoint at a source line, assembly instruction, or call stack function

Access the advanced functionality of breakpoints

Specify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change

Print to the Output window with tracepoints

Manage breakpoints in the Breakpoints window

Troubleshoot breakpoints

Breakpoint Glyphs Reference

目的の時点で実行を中断するブレークポイントを作成する

標準のブレークポイントは、ソース ファイル内の特定の位置でヒットするたびに、デバッガーの実行を中断します。開発者がよく使用する最も重要なデバッグ手法の 1 つです。 Visual Studio では、標準のブレークポイントよりもブレークポイントが実行される時点を詳細に制御できます。

  • プログラムが呼び出し履歴の関数に戻ると実行を停止する実行時ブレークポイントを設定することで、長い一連の [ステップ アウト] コマンドが実行されないようにできます。

  • コード内のループがある回数の反復の後に誤動作を開始することが疑われる場合、関連するコード行に対して指定したヒット カウントを超えると実行を停止するブレークポイントを設定できます。これにより、目的の反復回数に達するまで何度も F5 キーを押す ([デバッグ][続行] の順にクリックする) 必要がなくなります。

  • コード式を使用することで、ブレークポイントで実行が中断する正確な条件を指定できます。

[ブレークポイント] ウィンドウを使用して、多くのブレークポイントの状態と動作を管理できます。 共通な問題、特に複雑な問題を診断するために、手間をかけて一連のブレークポイントを作成した場合は、[ブレークポイント] ウィンドウのインポートおよびエクスポート コマンドを使用して、これらのブレークポイントを保存および共有できます。

注意

混在モード (ネイティブおよびマネージ) のコードをデバッグするときは、システム コンポーネントにブレークポイントを設定しないでください。混在モード デバッグ時にシステム コンポーネントにブレークポイントを設定すると、共通言語ランタイムが中断し、デバッガーが反応しなくなる可能性があります。

ページのトップへContents

ソース行、アセンブリ命令、または呼び出し履歴の関数にブレークポイントを設定する

  • Set a breakpoint in a source file • Set a breakpoint at a function return in the Call Stack window • Set a breakpoint at an assembly instruction in the Disassembly window

ソース ファイルでブレークポイントを設定する

ソース ウィンドウで標準のブレークポイントを設定するには、次の 2 つの方法があります。

  • 実行を中断する行でウィンドウの余白をダブルクリックします。

    または

  • その行を選択し、F9 キーを押します。

呼び出し履歴ウィンドウのブレークポイント

ブレークポイント アイコンが余白に表示されます。

コードの実行中にブレークポイントを視覚的にトレースするには、「Visual Studio でデバッグを行うときの呼び出し履歴に対するメソッドのマップ」を参照してください。

ページのトップへ Set a breakpoint at a source line, assembly instruction, or call stack function

ページのトップへContents

[呼び出し履歴] ウィンドウで関数戻り値にブレークポイントを設定する

[呼び出し履歴] ウィンドウでブレークポイントを設定することで、呼び出し元の関数が返す命令または行で実行を中断できます。 デバッガーは中断モードである必要があります。

  • [呼び出し履歴] ウィンドウを開き (ショートカット キー: Ctrl + Alt + C)、中断する呼び出し元の関数を選択します。

  • [ブレークポイント] を選択してコンテキスト メニューの [ブレークポイントの挿入] をクリックするか、ショートカット キーである F9 キーを押します。

関数呼び出し名の左側のマージンにブレークポイント シンボルが表示されます。

呼び出し履歴ウィンドウのブレークポイント

[ブレークポイント] ウィンドウ (ショートカットキー: Ctrl + Alt + B) を開いた場合、関数内の次に実行可能な命令に対応するメモリ位置に設定されたアドレス ブレークポイントとして、ブレークポイントが表示されます。 デバッガーはその命令で実行を中断します。

ブレークポイント ウィンドウの呼び出し履歴のブレークポイント

コードの実行中にブレークポイントを視覚的にトレースするには、「Visual Studio でデバッグを行うときの呼び出し履歴に対するメソッドのマップ」を参照してください。

ページのトップへ Set a breakpoint at a source line, assembly instruction, or call stack function

ページのトップへ Contents

[逆アセンブル] ウィンドウでアセンブリ命令にブレークポイントを設定する

アセンブリ命令にブレークポイントを設定するには、デバッガーが中断モードになっている必要があります。

  1. [逆アセンブル] ウィンドウを開きます (ショートカット キー: Ctrl + Alt + D)。

  2. 次のいずれかの操作を行います。

    1. 実行を中断する行でウィンドウの余白をダブルクリックします。

      または

    2. その行を選択し、F9 キーを押します。

ページのトップへ Set a breakpoint at a source line, assembly instruction, or call stack function

ページのトップへ Contents

ブレークポイントの高度な機能にアクセスする

ブレークポイント コンテキスト メニュー

ソース ウィンドウ、[呼び出し履歴] ウィンドウ、または [逆アセンブル] ウィンドウで、ブレークポイントのコンテキスト メニューを開き、プロパティを選択します。

[ブレークポイント] ウィンドウで、ブレークポイントの行を選択し、コンテキスト メニューを開きます。 条件の列に直接いくつかの条件を設定することもできます。

ページのトップへ Contents

ヒット カウント、式の評価、実行位置、またはデータ変更に基づいて実行を中断するブレークポイントを指定する

  • Specify a hit count at which the breakpoint executes • Specify a breakpoint condition using a code expression • Specify the devices, processes, or threads that a breakpoint executes on • Set a data change breakpoint (native C++ only)

ブレークポイントが実行されるヒット カウントを指定する

ヒット カウントでは、ブレークポイントのヒット カウントを追跡します。 ブレークポイントが実行される値と条件を設定します。ヒット カウントが指定した値と等しいとき、指定した値の倍数になったとき、または指定した値以上になったときに、ブレークポイントが実行されるように設定できます。 ヒット カウントと条件を指定するには、次の手順を実行します。

  1. [ブレークポイントのヒット カウント] ダイアログ ボックスを開きます。

    1. ソース、[逆アセンブル]、または [呼び出し履歴] でブレークポイントがある行を選択し、コンテキスト メニューで [ブレークポイント][ヒット カウント] の順にクリックします。

      または

    2. [ブレークポイント] ウィンドウで、ブレークポイントの行を選択し、コンテキスト メニューの [ヒット カウント] をクリックします。

      [ブレークポイントのヒット カウント] ダイアログ ボックス

  2. 条件を選択し、ヒット カウントを入力します。

ヒット カウントの条件が便利なのは、特定の反復回数でループの実行を中断する必要があるときです。 実行を中断せずに、ブレークポイントのヒット カウントを数える必要がある場合は、ヒット カウントを非常に大きい値に設定することもできます。

指定したヒット カウントは、そのデバッグ セッションでのみ保持されます。 デバッグ セッションが終了すると、ヒット カウントはゼロにリセットされます。

ページのトップへ Specify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change

ページのトップへ Contents

コード式を使用してブレークポイントの条件を指定する

"ブレークポイント条件" は、デバッガーにおいて、ブレークポイントに達したことを評価する式です。 条件が満たされた場合、デバッガーは実行を中断します。

条件には、デバッガーによって認識される有効な式を指定できます。 たとえば、銀行のプログラムでは、"balance < 0" のようなブレークポイント条件を設定できます。 有効な式の詳細については、「デバッガー内の式」を参照してください。

ブレークポイント条件を指定するには

  1. ブレークポイントのコンテキスト メニューを開き、[条件] をクリックします。

  2. [ブレークポイントの条件] ダイアログ ボックスで、有効な式を [条件] ボックスに入力します。

  3. 式の条件を満たす場合に中断するときは [true の場合] をオンにし、式の値が変更されたときに中断するときは [変更された場合] をオンにします。

デバッガーでは、初めてブレークポイントに達するまで、式は評価されません。 ネイティブ コードに対して [変更された場合] をオンにしている場合、デバッガーは条件の最初の評価を変更と見なさないため、最初の評価でブレークポイントはヒットしません。 マネージ コードに対して [変更された場合] をオンにしている場合、[変更された場合] が選択された後の最初の評価でブレークポイントがヒットします。

無効な構文でブレークポイント条件を設定すると、直ちに警告メッセージが表示されます。 有効な構文でブレークポイント条件を指定しても、セマンティクスが無効な場合は、ブレークポイントに初めて達したときに警告メッセージが表示されます。 どちらの場合でも、無効なブレークポイントに達すると実行が中断されます。 ブレークポイント条件が有効で、評価結果が false の場合にのみ、ブレークポイントはスキップされます。

ページのトップへ Specify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change

ページのトップへ Contents

ブレークポイントが実行されるデバイス、プロセス、またはスレッドを指定する

  1. ブレークポイントのコンテキスト メニューを開き、[フィルター] をクリックします。

    [ブレークポイントのフィルター] ダイアログ ボックス

  2. ダイアログ ボックスの指示に従ってフィルターの条件を指定します。

ページのトップへ Specify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change

ページのトップへ Contents

データ変更ブレークポイントを設定する (ネイティブ C++ のみ)

データ ブレークポイントを使用すると、指定したメモリ位置に格納された値に書き込みが行われたときに、実行が中断されます。 値が読み取られても書き込まなければ、実行は中断されません。 データ ブレークポイントを設定するには、デバッガーが中断モードになっている必要があります。

  1. [デバッグ] メニューで [ブレークポイントの作成][新しいデータ ブレークポイント] の順にクリックします。

    または

    [ブレークポイント] ウィンドウ メニューで [新規作成][新しいデータ ブレークポイント] の順にクリックします。

    [ブレークポイントの作成] ダイアログ ボックス

  2. [アドレス] ボックスに、メモリ アドレス、またはメモリ アドレスを表す式を入力します。

    たとえば、「&avar」と入力すると、変数 avar の値が変更されたときに中断します。

  3. [バイト数] ボックスに、デバッガーがウォッチするバイト数を入力します。

    たとえば、「4」と入力すると、&myFunction で始まる 4 バイトがウォッチされ、そのバイト値のいずれかが変更されると中断します。

データ ブレークポイントを設定するには、デバッガーが中断モードになっている必要があります。

データ ブレークポイントは次の条件では機能しません。

  • デバッグ対象外のプロセスがメモリ位置に書き込む場合

  • メモリ位置が複数のプロセス間で共有されている場合

  • メモリ位置がカーネル内で更新される場合 たとえば、32 ビット Windows の ReadFile 関数にメモリが渡された場合、メモリはカーネル モードから更新されるので、メモリの書き込み時にもデバッガーは中断されません。

変数のアドレスは、あるデバッグ セッションと次のデバッグ セッションでは変わります。 そのため、データ ブレークポイントは、デバッグ セッションが終了すると自動的に無効になります。

ローカル変数でデータ ブレークポイントを設定した場合は、関数が終了したときにもデータ ブレークポイントは有効のままになります。 ただし、ブレークポイントが設定されているメモリ アドレスの意味は同じではありません。 したがって、そのようなブレークポイントの結果は予測できません。 データ ブレークポイントをローカル変数に設定した場合は、関数が終了する前にブレークポイントを削除するか無効にするのが望ましいといえます。

Visual Studio では、1 つのソリューションあたり最大で 4 つのブレークポイントがサポートされています。

ページのトップへ Specify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change

ページのトップへContents

トレースポイントで [出力] ウィンドウに出力する

トレースポイントはブレークポイントの別の使用方法です。 トレースポイントは、[出力] ウィンドウにメッセージを出力するブレークポイントです。 トレースポイントはプログラミング言語の一時的なトレース ステートメントのように機能できます。

既存のブレークポイントでメッセージを出力するには、ブレークポイントのコンテキスト メニューを開き、[ヒット時] をクリックします。

[ブレークポイントのヒット時] ダイアログ ボックスで出力するメッセージを指定します。

[ブレークポイントのヒット時] ダイアログ ボックス

メッセージを指定する

DebuggerDisplayAttribute 構文を使用して、メッセージにプログラム情報を含めることもできます (詳細については、DebuggerDisplayAttribute を参照)。 ここでは例をいくつか示します。

  • In function '{$FUNC}', on thread '{$TID}'

  • Used variable: {varName}, function name: {functionName($FUNC)}

[ブレークポイントのヒット時] ダイアログ ボックスに表示される任意のキーワードを使用できます。 さらに、ダイアログ ボックスに表示されない他の 2 つのキーワードも使用できます。$TICK は現在の CPU ティック数を挿入し、$FILEPOS は現在のファイルの位置を挿入します。

トレースポイントの動作を指定する

トレースポイントがヒットしときに実行を中断するには、[続けて実行する] チェック ボックスをオフにします。 [続けて実行する] をオンにすると、実行は停止しません。 どちらの場合も、メッセージが出力されます。

トレースポイントを無効にする

トレースポイントを一時的に無効にするには、[メッセージを表示する] チェック ボックスをオフにします。

ページのトップへContents

[ブレークポイント] ウィンドウでブレークポイントを管理する

  • Export and import breakpoints • Label breakpoints

[ブレークポイント] ウィンドウのブレークポイントを設定、構成、管理するほとんどすべての機能は、ソース ウィンドウ、[呼び出し履歴] ウィンドウ、[逆アセンブル] ウィンドウ内の個々のブレークポイントの位置で使用できます。 [ブレークポイント] ウィンドウでは、すべてのブレークポイントを一元的に管理できますが、ブレークポイントが重要な大規模なソリューションや複雑なデバッグ シナリオで、このウィンドウは特に役立ちます。 一連のブレークポイントの状態と位置を保存または共有する必要がある場合、[ブレークポイント] ウィンドウからのみ、ブレークポイント ファイルを保存およびインポートできます。

ページのトップへ Manage breakpoints in the Breakpoints window

ページのトップへ Contents

ブレークポイントにラベルを付ける

ブレークポイントのラベルは、[ブレークポイント] ウィンドウでブレークポイントの一覧の並べ替えとフィルターにのみ使用します。 ブレークポイントにラベルを追加するには、ブレークポイントの行を選択し、コンテキスト メニューの [ラベル] をクリックします。

ブレークポイントをトラブルシューティングする

  • The debugger can't determine the source file for a breakpoint • The debugger can't locate the correct version of the source file for a breakpoint • Breakpoints don't work in a DLL

デバッガーがブレークポイントのソース ファイルを識別できない

プロジェクト内の複数のソース ファイルに同じ名前が付いていると、デバッガーがブレークポイントが設定されているファイルを判断できなくなることがあります。 この問題は、リンク先のデバッグ ライブラリのコンポーネントと同じ名前を持つモジュールを作成した場合に頻繁に発生します。

この問題を解決するには、ソース ウィンドウでブレークポイントを選択し、コンテキスト メニューの [場所] をクリックします。

[ファイルのブレークポイント] ダイアログ ボックス

[ファイル] ボックスに正しいファイルへの完全なパスを入力します。

ページのトップへTroubleshoot breakpoints

ページのトップへContents

デバッガーがブレークポイントのソース ファイルの正しいバージョンを特定できない

ソース ファイルが変更されて、デバッグ対象のコードと一致しなくなった場合、デバッガーは、ソース ファイルが存在していても、ブレークポイントに対応するソース ファイルを探すことがあります。

  1. Visual Studio で、デバッグ対象のバージョンと一致しないソース コードを表示するには、[デバッグ][オプションと設定] の順にクリックします。 [デバッグ]/[全般] ページで、[元のバージョンと完全に一致するソース ファイルを必要とする] オプションをオフにします。

  2. ブレークポイントをソース ファイルにバインドすることもできます。 ブレークポイントを選択し、コンテキスト メニューの [場所] をクリックします。 [ファイルのブレークポイント] ダイアログ ボックスで [元のバージョンと異なるソース コードを許可する] チェック ボックスをオンにします。

ページのトップへTroubleshoot breakpoints

ページのトップへContents

ブレークポイントが DLL で機能しない

デバッガーがモジュールのコードの場所に関するデバッグ情報を読み込んでいない場合は、ソース ファイルにブレークポイントを設定できません。 このようなときは、ブレークポイントを設定できないことを示すメッセージが表示されます。 ブレークポイントの場所に、警告ブレークポイント グリフが表示されます。 ただし、これらの警告ブレークポイントは、コードが読み込まれたときに実際のブレークポイントになります。

ページのトップへ Troubleshoot breakpoints

ページのトップへContents

ブレークポイントのグリフの参照

ソース ウィンドウと [逆アセンブル] ウィンドウでは、左の余白に表示される "グリフ" と呼ばれる記号で、ブレークポイントの位置が示されます。 次の表は、このグリフについての説明です。

マウスをブレークポイントのグリフに合わせると、ブレークポイントの詳細なヒントが表示されます。 このヒントは、エラーや警告のブレークポイントの場合、特に便利です。

グリフ

説明

Glyph 1 のデバッグ

通常のブレークポイント。 塗りつぶしのグリフは、ブレークポイントが有効であることを示します。 中空のグリフは、無効であることを示します。

Glyph 2 のデバッグ

高度なブレークポイント。 アクティブまたは無効。 + 記号は、ブレークポイントに 1 つ以上の高度な機能 (条件、ヒット カウント、フィルターなど) が付属していることを示します。

Glyph 3 のデバッグ

マップされたブレークポイント。 アクティブまたは無効。 このブレークポイントは、ASP/ASP.NET コードで設定され、対応する HTML ページのブレークポイントにマップされるか、またはサーバー側のスクリプト ファイルに設定され、対応するクライアント側スクリプト ファイルにマップされます。

Glyph 4 のデバッグ

トレースポイント。 アクティブまたは無効。 このポイントがヒットすると、指定したアクションが実行されますが、プログラムの実行は中断されません。

Glyph 5 のデバッグ

高度なトレースポイント。 アクティブまたは無効。 + 記号は、トレースポイントに 1 つ以上の高度な機能 (条件、ヒット カウント、フィルターなど) が付属していることを示します。

Glyph 6 のデバッグ

マップされたトレースポイント。 アクティブまたは無効。 このトレースポイントは、ASP/ASP.NET コードで設定され、対応する HTML ページのトレースポイントにマップされます。

Glyph 7 のデバッグ

ブレークポイントまたはトレースポイントのエラー。 X 記号は、ブレークポイントまたはトレースポイントが、エラー状態のために設定できなかったことを示します。

Glyph 8 のデバッグ

ブレークポイントまたはトレースポイントの警告。 感嘆符 (!) は、ブレークポイントまたはトレースポイントが、一時的な状況のために設定できなかったことを示します。 一般に、ブレークポイントまたはトレースポイントの位置にあるコードが読み込まれていないことを意味します。 プロセスにアタッチしたのにそのプロセスのシンボルが読み込まれなかったときにも表示されることがあります。 コードまたはシンボルが読み込まれると、ブレークポイントは有効になり、グリフも変わります。

ページのトップへContents

参照

概念

Visual Studio Debugger の開始、中断、ナビゲート、および停止