Visual Studio デバッガーで [メモリ] ウィンドウを使用する (C#、C++、Visual Basic、F#)

デバッグ中、[メモリ] ウィンドウには、アプリで使用されているメモリ空間が表示されます。

[ウォッチ][自動][ローカル][クイックウォッチ] ダイアログなど、デバッガー ウィンドウには、メモリ内の特定の場所に保管される変数が表示されます。 [メモリ] ウィンドウには、全体の画像が表示されます。 この [メモリ] ウィンドウは、他のウィンドウではうまく表示されない大きなデータ (バッファーや長い文字列など) をチェックする場合に便利です。

[メモリ] ウィンドウの機能は、データの表示だけではありません。 [メモリ] ウィンドウには、データ、コード、未割り当てメモリの不要なランダム ビットなど、メモリ空間内のすべての要素が表示されます。

[メモリ] ウィンドウはスクリプトまたは SQL のデバッグには使用できません。 それらの言語では、メモリの概念が認識されません。

[メモリ] ウィンドウを開く

他のデバッガー ウィンドウと同様に、[メモリ] ウィンドウはデバッグ セッション中にのみ利用できます。

重要

[メモリ] ウィンドウを有効にするには、[ツール]>[オプション] (または [デバッグ]>[オプション])、>[デバッグ]>[全般] の順に選択し、[アドレス レベルのデバッグを有効にする] を選択する必要があります。

[メモリ] ウィンドウを開くには

  1. [ツール]>[オプション] (または [デバッグ]>[オプション])、>[デバッグ]>[全般] の順に選択し、[アドレス レベルのデバッグを有効にする] を選択してください。

  2. デバッグを開始するには、緑色の矢印を選択するか、F5 を押すか、[デバッグ][デバッグの開始] の順に選択します。

  3. [デバッグ][Windows][メモリ] の順に選択し、[メモリ 1][メモリ 2][メモリ 3]、または [メモリ 4] を選択します。 (Visual Studio のエディションによっては、[メモリ] ウィンドウは 1 つだけになります。)

[メモリ] ウィンドウ内を移動する

コンピューターのアドレス空間は大きく、[メモリ] ウィンドウ内でスクロールしていると場所がわからなくなることがよくあります。

上位のメモリ アドレスは、ウィンドウの下部に表示されます。 上位アドレスを表示するには、スクロール ダウンする必要があります。 下位アドレスを表示するには、上にスクロールします。

ドラッグアンドドロップを使用するか、[アドレス] フィールドにアドレスを入力することで、[メモリ] ウィンドウで指定のアドレスに瞬時に移動できます。 [アドレス] フィールドには、英数字アドレスと、e.User.NonroamableId のような、アドレスに評価される式を入力できます。

[アドレス] フィールドの式をすぐに再評価するように強制するには、[自動的に再評価] 丸い矢印のアイコンを選択します。

[メモリ] ウィンドウの既定では、[アドレス] 式は、アプリの実行時に再評価されるライブ式として扱われます。 ライブ式はたとえば、ポインター変数で接するメモリの表示に便利です。

ドラッグアンドドロップを使用し、メモリ位置に移動するには:

  1. 任意のデバッガー ウィンドウで、メモリ アドレスを選択するか、メモリ アドレスを含むポインター変数を選択します。

  2. アドレスまたはポインターを [メモリ] ウィンドウにドラッグアンドドロップします。 そのアドレスは [アドレス] フィールドに表示されます。また、そのアドレスが一番上に表示されるように [メモリ] ウィンドウが調整されます。

[アドレス] フィールドに入力することでメモリ位置に移動するには:

  • [アドレス] フィールドにアドレスまたは式を入力するか貼り付け、Enter を押します。あるいは、[アドレス] フィールドでドロップダウンから選択します。 そのアドレスが一番上に表示されるように [メモリ] ウィンドウが調整されます。

[メモリ] ウィンドウをカスタマイズする

既定では、メモリの内容は 16 進数形式の 1 バイト整数として表示されます。そして、ウィンドウの幅によって、表示される列の数が決定されます。 [メモリ] ウィンドウでのメモリの内容の表示方法をカスタマイズできます。

メモリの内容の表示形式を変更するには:

  • [メモリ] ウィンドウを右クリックし、コンテキスト メニューから任意の形式を選択します。

[メモリ] ウィンドウの列数を変更するには:

  • [列] フィールドの横にあるドロップダウンを選択し、表示する列数を選択するか、[自動] を選択し、ウィンドウの幅に基づいて自動調整します。

アプリの実行時に [メモリ] ウィンドウの内容が変化しないようにする場合、ライブ式の評価をオフにすることができます。

ライブ評価のオンとオフを切り替えるには:

  • [メモリ] ウィンドウを右クリックし、コンテキスト メニューで [自動的に再評価] を選択します。

    Note

    ライブ式の評価はトグル スイッチであり、既定ではオンになっています。そのため、[自動的に再評価] を選択するとオフに変わります。 [自動的に再評価] をもう一度選択すると、オンに戻ります。

[メモリ] ウィンドウの上部にあるツール バーの表示/非表示を切り替えることができます。 ツール バーが非表示になっていると、[アドレス] フィールドやその他のツールにアクセスできません。

ツール バー表示を切り替えるには:

  • [メモリ] ウィンドウを右クリックし、コンテキスト メニューで [ツール バーの表示] を選択します。 直前の状態に応じて、ツール バーが表示されるか非表示になります。

メモリ内でポインターを追跡する (C/C++)

ネイティブ コード アプリでは、レジスタ名をライブ式として使用できます。 たとえば、スタック ポインターを使用して、スタックを追跡できます。

メモリ内でポインターを追跡するには:

  1. [メモリ] ウィンドウの [アドレス] フィールドに、現在のスコープに入っているポインター式を入力します。 言語によっては、逆参照が必要な場合があります。

  2. Enter キーを押します。

    Step など、デバッグ コマンドを使用すると、[アドレス] フィールドに表示されるメモリ アドレスと [メモリ] ウィンドウの一番上に表示されるメモリ アドレスがポインターの変化に連動して自動的に変更されます。

メモリ ポインターを表示する (.NET)

ヒープ スナップショットから取得したアドレスなど、メモリ ポインターに基づいて .NET オブジェクトの内容を表示する場合は、{CLR}@Address 表記を使ってこれを行うことができます。 アドレスは、0x1D102A581B0 など、メモリへのポインターにする必要があります。 [メモリ] ウィンドウの [アドレス] フィールドに、{CLR}@Address 表記を使ってメモリ ポインターを入力します。 また、同じ表記を使い、ウォッチ ウィンドウを使ってウォッチを追加することもできます。

ヒープ スナップショットからメモリ ポインター アドレスを取得するには、ヒープ ダンプを開き、[マネージド メモリのデバッグ] を選びます。これにより、メモリ使用量ツールが開きます。 目的のオブジェクトを右クリックし、[インスタンスの表示] を選びます。