Visual Studio デバッガーで [メモリ] ウィンドウを使用する (C#、C++、Visual Basic、F#)
デバッグ中、[メモリ] ウィンドウには、アプリで使用されているメモリ空間が表示されます。
[ウォッチ]、[自動]、[ローカル]、[クイックウォッチ] ダイアログなど、デバッガー ウィンドウには、メモリ内の特定の場所に保管される変数が表示されます。 [メモリ] ウィンドウには、全体の画像が表示されます。 この [メモリ] ウィンドウは、他のウィンドウではうまく表示されない大きなデータ (バッファーや長い文字列など) をチェックする場合に便利です。
[メモリ] ウィンドウの機能は、データの表示だけではありません。 [メモリ] ウィンドウには、データ、コード、未割り当てメモリの不要なランダム ビットなど、メモリ空間内のすべての要素が表示されます。
[メモリ] ウィンドウはスクリプトまたは SQL のデバッグには使用できません。 それらの言語では、メモリの概念が認識されません。
[メモリ] ウィンドウを開く
他のデバッガー ウィンドウと同様に、[メモリ] ウィンドウはデバッグ セッション中にのみ利用できます。
重要
[メモリ] ウィンドウを有効にするには、[ツール]>[オプション] (または [デバッグ]>[オプション])、>[デバッグ]>[全般] の順に選択し、[アドレス レベルのデバッグを有効にする] を選択する必要があります。
[メモリ] ウィンドウを開きます。
[ツール]>[オプション] (または [デバッグ]>[オプション])、>[デバッグ]>[全般] の順に選択し、[アドレス レベルのデバッグを有効にする] を選択してください。
デバッグを開始するには、緑色の矢印を選択するか、F5 を押すか、[デバッグ]、[デバッグの開始] の順に選択します。
[デバッグ]、[Windows]、[メモリ] の順に選択し、[メモリ 1]、[メモリ 2]、[メモリ 3]、または [メモリ 4] を選択します。 (Visual Studio のエディションによっては、[メモリ] ウィンドウは 1 つだけになります。)
複数のウィンドウを使用すると、メモリ空間内のさまざまな領域のビューを同時に維持できます。
[メモリ] ウィンドウ内を移動する
コンピューターのアドレス空間は大きく、[メモリ] ウィンドウ内でスクロールしていると場所がわからなくなることがよくあります。
上位のメモリ アドレスは、ウィンドウの下部に表示されます。 上位アドレスを表示するには、スクロール ダウンする必要があります。 下位アドレスを表示するには、上にスクロールします。
ほとんどのシナリオでは、特定のメモリ位置を検索する必要があります。
メモリの場所を検索する
ドラッグアンドドロップを使用するか、[アドレス] フィールドにアドレスを入力することで、[メモリ] ウィンドウで指定のアドレスに瞬時に移動できます。 [アドレス] フィールドには、英数字アドレスと、e.User.NonroamableId
のような、アドレスに評価される式を入力できます。
[アドレス] フィールドの式をすぐに再評価するように強制するには、[自動的に再評価] 丸い矢印のアイコンを選択します。
[メモリ] ウィンドウの既定では、[アドレス] 式は、アプリの実行時に再評価されるライブ式として扱われます。 ライブ式はたとえば、ポインター変数で接するメモリの表示に便利です。
ドラッグ アンド ドロップを使用してメモリの場所に移動します。
任意のデバッガー ウィンドウで、メモリ アドレスを選択するか、メモリ アドレスを含むポインター変数を選択します。
アドレスまたはポインターを [メモリ] ウィンドウにドラッグアンドドロップします。
そのアドレスが Address フィールドに表示され、[ Memory ウィンドウが調整され、そのアドレスが上部に表示されます。
メモリの場所に移動する場所を [アドレス] フィールドに入力します。
[アドレス] フィールドにアドレスまたは式を入力するか貼り付け、Enter を押します。あるいは、[アドレス] フィールドでドロップダウンから選択します。
そのアドレスが Address フィールドに表示され、[ Memory ウィンドウが調整され、そのアドレスが上部に表示されます。
[メモリ] ウィンドウをカスタマイズする
既定では、メモリの内容は 16 進数形式の 1 バイト整数として表示されます。そして、ウィンドウの幅によって、表示される列の数が決定されます。 [メモリ] ウィンドウでのメモリの内容の表示方法をカスタマイズできます。
メモリの内容の形式を変更します。
- [メモリ] ウィンドウを右クリックし、コンテキスト メニューから任意の形式を選択します。
[メモリ] ウィンドウの列数を変更します。
- Columns フィールドの横にあるドロップダウン矢印を選択し、表示する列の数を選択するか、ウィンドウの幅に基づいて自動調整を行う場合は Auto を選択します。
アプリの実行時に [メモリ] ウィンドウの内容が変化しないようにする場合、ライブ式の評価をオフにすることができます。
ライブ評価の切り替え:
[メモリ] ウィンドウを右クリックし、コンテキスト メニューで [自動的に再評価] を選択します。
Note
ライブ式の評価はトグル スイッチであり、既定ではオンになっています。そのため、[自動的に再評価] を選択するとオフに変わります。 [自動的に再評価] をもう一度選択すると、オンに戻ります。
[メモリ] ウィンドウの上部にあるツール バーの表示/非表示を切り替えることができます。 ツール バーが非表示になっていると、[アドレス] フィールドやその他のツールにアクセスできません。
ツール バーの表示を切り替えます。
- [メモリ] ウィンドウを右クリックし、コンテキスト メニューで [ツール バーの表示] を選択します。 直前の状態に応じて、ツール バーが表示されるか非表示になります。
メモリ内でポインターを追跡する (C/C++)
ネイティブ コード アプリでは、レジスタ名をライブ式として使用できます。 たとえば、スタック ポインターを使用して、スタックを追跡できます。
メモリを介してポインターに従います。
[メモリ] ウィンドウの [アドレス] フィールドに、現在のスコープに入っているポインター式を入力します。 言語によっては、逆参照が必要な場合があります。
Enter キーを押します。
Step など、デバッグ コマンドを使用すると、[アドレス] フィールドに表示されるメモリ アドレスと [メモリ] ウィンドウの一番上に表示されるメモリ アドレスがポインターの変化に連動して自動的に変更されます。
メモリ ポインターを表示する (.NET)
ヒープ スナップショットから取得したアドレスなど、メモリ ポインターに基づいて .NET オブジェクトの内容を表示する場合は、{CLR}@Address
表記を使ってこれを行うことができます。 アドレスは、0x1D102A581B0 など、メモリへのポインターにする必要があります。 [メモリ] ウィンドウの [アドレス] フィールドに、{CLR}@Address
表記を使ってメモリ ポインターを入力します。 また、同じ表記を使い、ウォッチ ウィンドウを使ってウォッチを追加することもできます。
ヒープ スナップショットからメモリ ポインター アドレスを取得するには、ヒープ ダンプを開き、[マネージド メモリのデバッグ] を選びます。これにより、メモリ使用量ツールが開きます。 目的のオブジェクトを右クリックし、[インスタンスの表示] を選びます。