다음을 통해 공유


Visual Studio 디버거에서 메모리 창 사용(C#, C++, Visual Basic, F#)

디버깅하는 동안 메모리 창에는 앱에서 사용 중인 메모리 공간이 표시됩니다.

Watch, Autos, Locals, QuickWatch 대화 상자와 같은 디버거 창에는 메모리의 특정 위치에 저장된 변수가 표시됩니다. 메모리 창에는 전체 그림이 표시됩니다. 메모리 뷰는 다른 창에 잘 표시되지 않는 큰 데이터 조각(예: 버퍼 또는 큰 문자열)을 검사하는 데 편리합니다.

메모리 창은 데이터 표시로 제한되지 않습니다. 할당되지 않은 메모리의 데이터, 코드 및 임의 가비지 비트를 포함하여 메모리 공간의 모든 항목을 표시합니다.

메모리 창은 스크립트 또는 SQL 디버깅에 사용할 수 없습니다. 이러한 언어는 메모리의 개념을 인식하지 못합니다.

메모리 창 열기

다른 디버거 창과 마찬가지로 메모리 창은 디버깅 세션 중에만 사용할 수 있습니다.

중요하다

메모리 창을 사용하려면 도구>옵션(또는 디버그>옵션) >디버깅>일반에서 주소 수준 디버깅을 선택해야 합니다.

메모리 창을 엽니다.

  1. 도구>옵션(또는 디버그>옵션) >>일반디버깅에서 주소 수준 디버깅 사용하도록 설정해야 합니다.

  2. 디버깅을 시작하려면 녹색 화살표를 선택하거나, F5 를 누르거나, 또는 디버그>디버깅을 선택하십시오.

  3. 디버그>Windows>메모리아래에서 메모리 1, 메모리 2, 메모리 3또는 메모리 4선택합니다. (Visual Studio의 일부 버전은 메모리 창 하나만 제공합니다.)

여러 창을 사용하면 메모리 공간의 여러 영역에 대한 보기를 동시에 유지할 수 있습니다.

메모리 창 안에서 움직이다

컴퓨터의 주소 공간이 크면 메모리 창에서 스크롤하여 위치를 쉽게 잃을 수 있습니다.

창 아래쪽에 더 높은 메모리 주소가 나타납니다. 더 높은 주소를 보려면 아래로 스크롤합니다. 낮은 주소를 보려면 위로 스크롤합니다.

대부분의 시나리오에서는 특정 메모리 위치를 찾으려고 합니다.

메모리 위치 찾기

끌어서 놓기를 사용하거나 주소 필드에 주소를 입력하여 메모리 창에서 지정된 주소로 즉시 갈 수 있습니다. 주소 필드는 영숫자 주소 및 주소로 계산되는 식(예: e.User.NonroamableId)을 허용합니다.

주소 필드에서 식을 즉시 다시 평가하려면, 둥근 화살표 아이콘인 자동 다시 평가를 선택합니다.

기본적으로 메모리 창은 Address 식을 라이브 식으로 처리하며 앱이 실행될 때 다시 평가됩니다. 라이브 식은 예를 들어 포인터 변수에서 터치되는 메모리를 보는 데 유용할 수 있습니다.

끌어서 놓기를 사용하여 메모리 위치로 이동합니다.

  1. 디버거 창에서 메모리 주소 또는 메모리 주소를 포함하는 포인터 변수를 선택합니다.

  2. 메모리 창에서 주소 또는 포인터를 끌어서 놓습니다.

    해당 주소는 주소 필드에 나타나고 메모리 창이 위쪽에 해당 주소를 표시하도록 조정됩니다.

주소 필드에 메모리 위치로 이동할 위치를 입력합니다.

  • 주소 또는 식을 주소 필드에 입력하거나 붙여넣고 enter누르거나 주소 필드의 드롭다운에서 선택합니다.

    해당 주소는 주소 필드에 나타나고 메모리 창이 위쪽에 해당 주소를 표시하도록 조정됩니다.

    메모리 창의 스크린샷

메모리 창 사용자 지정

기본적으로 메모리 콘텐츠는 16진수 형식의 1바이트 정수로 표시되고 창 너비에 따라 표시되는 열 수가 결정됩니다. 메모리 창에 메모리 내용이 표시되는 방식을 사용자 지정할 수 있습니다.

메모리 내용의 형식을 변경합니다.

  • 메모리 창을 마우스 오른쪽 단추로 클릭하고 상황에 맞는 메뉴에서 원하는 형식을 선택합니다.

메모리 창의 열 수를 변경합니다.

  • 필드 옆의 드롭다운 화살표를 선택하고 표시할 열 수를 선택하거나 창 너비에 따라 자동 조정을 위해 자동 선택합니다.

앱이 실행되면 메모리 창의 내용이 변경되지 않도록 하려면 라이브 식 평가를 해제할 수 있습니다.

라이브 평가 전환:

  • 메모리 창을 마우스 오른쪽 단추로 클릭하고 상황에 맞는 메뉴에서 자동으로 다시 평가를 선택합니다.

    메모

    라이브 표현 평가 기능은 토글 기능으로, 기본적으로 켜져 있으므로 자동으로 다시 평가를 선택하면 해제됩니다. 자동으로 다시 평가을 선택하면 다시 켜집니다.

메모리 창의 맨 위에 도구 모음을 숨기거나 표시할 수 있습니다. 도구 모음이 숨겨져 있으면 주소 필드 또는 기타 도구에 액세스할 수 없습니다.

도구 모음 표시를 켜거나 끕니다.

  • 메모리 창을 마우스 오른쪽 단추로 클릭하고 상황에 맞는 메뉴에서 도구 모음 표시를 선택합니다. 도구 모음은 이전 상태에 따라 나타나거나 사라집니다.

메모리를 통해 포인터 팔로우(C/C++)

네이티브 코드 앱에서는 레지스터 명칭을 실시간 표현으로 사용할 수 있습니다. 예를 들어 스택 포인터를 사용하여 스택을 따를 수 있습니다.

메모리를 통해 포인터를 따릅니다.

  1. 메모리 창의 주소 필드에 현재 범위 내에 있는 포인터 식을 입력합니다. 언어에 따라 해당 언어를 역참조해야 할 수 있습니다.

  2. 을 누른 후을 입력합니다.

    단계같은 디버그 명령을 사용하면 포인터가 변경되면 주소 필드와 메모리 창의 맨 위에 표시되는 메모리 주소가 자동으로 변경됩니다.

메모리 포인터 보기(.NET)

힙 스냅샷가져온 주소와 같이 메모리 포인터를 기반으로 .NET 개체의 콘텐츠를 보려면 {CLR}@Address 표기법을 사용하여 이 작업을 수행할 수 있습니다. 주소는 0x1D102A581B0 같은 메모리에 대한 포인터여야 합니다. 메모리 창 주소 필드에 {CLR}@Address 표기법을 사용하여 메모리 포인터를 입력합니다. 혹은 동일한 표기법을 사용하여 워치 창에 시계를 추가할 수 있습니다.

힙 스냅샷에서 메모리 포인터 주소를 가져오려면, 힙 덤프를 열고, 디버그 관리 메모리을 선택합니다. 그러면 메모리 사용량 도구가 열립니다. 관심 있는 개체를 마우스 오른쪽 단추로 클릭하고 인스턴스 보기선택합니다.