Visual Studio 디버거에서 동적으로 할당 된 배열을 표시하는 방법은 무엇입니까?


144

정적으로 할당 된 배열이있는 경우 Visual Studio 디버거는 모든 배열 요소를 쉽게 표시 할 수 있습니다. 그러나 동적으로 할당되고 포인터로 가리키는 배열이있는 경우 +를 클릭하여 확장하면 배열의 첫 번째 요소 만 표시됩니다. 디버거에 알려주는 쉬운 방법이 있습니까?이 데이터를 Foo 유형 및 X 크기의 배열로 표시합니까?

답변:


196

예, 간단합니다. 당신이 있다고 말해

char *a = new char[10];

디버거에 쓰기 :

a,10

마치 배열 인 것처럼 내용을 보여줍니다.


10
훌륭한 방법이지만 포인터가 여러 배열을 가리키는 경우 조사 식 창에서 "a, 10"으로 확장 된 개별 요소는 자체적으로 확장 할 수 없습니다. 이 방법을 사용하면 배열의 세 번째 요소를 파헤칠 수 없습니다. 극복 할 수있는 것입니까?
SirPentor

@ SirPentor 나는 같은 문제가 있습니다. 해결책을 찾았습니까?
becko

@ becko-- 필수. 실망 스럽습니다.
SirPentor

와우, 그것의 구조에 쓸모없는, 당신은 단지 값이 아닌 변수의 이름을 볼 수 있습니다
Icebone1000

2
초보자의 경우 : "a"변수를 선택한 경우 마우스 오른쪽 버튼을 클릭하고 감시 목록에 추가 (검사), 감시 된 값 목록에서 디버거보기를 열면 (현재 창 이름을 찾을 수 없음) "a"를 두 번 클릭하고 "a, X"로 이름을 바꿀 수 있습니다. 여기서 X는 항목 수입니다. 이제 모든 값을 볼 수 있습니다.
darkgaze

33

배열 m4x4에서 데이터를 보는 두 가지 방법이 있습니다.

float m4x4[16]={
    1.f,0.f,0.f,0.f,
    0.f,2.f,0.f,0.f,
    0.f,0.f,3.f,0.f,
    0.f,0.f,0.f,4.f
};

한 가지 방법은 조사 식 창 (Debug / Windows / Watch)을 사용하는 것입니다. 시계 추가 =

m4x4,16

목록에 데이터가 표시됩니다.

여기에 이미지 설명을 입력하십시오

다른 방법은 메모리 창 (디버그 / Windows / 메모리)입니다. 메모리 시작 주소 지정 =

m4x4

이것은 테이블에 데이터를 표시하며, 2 차원 및 3 차원 행렬에 더 좋습니다.

여기에 이미지 설명을 입력하십시오

메모리 창을 마우스 오른쪽 버튼으로 클릭하여 이진 데이터의 시각화 방법을 결정하십시오. 선택은 정수, 부동 수 및 일부 텍스트 인코딩으로 제한됩니다.


21

조사 식 창에서 배열 이름과 표시 할 항목 수 뒤에 쉼표를 추가하십시오.


10

재 방문 :

아래 포인터가 있다고 가정 해 봅시다.

double ** a; // assume 5*10

그런 다음 Visual Studio 디버그 시계에서 아래에 쓸 수 있습니다.

(double(*)[10]) a[0],5

아래와 같이 배열로 캐스팅하고 모든 내용을 한 번에 볼 수 있습니다.

double[5][10] a;

5

에 대한,

int **a; //row x col

이것을보고 추가하십시오

(int(**)[col])a,row

"시계"를 찾을 수 없습니다. 어 Where 어?
Egor Randomize

4

이 작업을 수행하는 또 다른 방법은 여기 MSDN에 지정되어 있습니다 .

즉, 문자형 배열을 여러 유형의 문자열로 표시 할 수 있습니다. 다음과 같이 선언 된 배열이있는 경우 :

char *a = new char[10];

다음과 같이 시계 창에서 유니 코드 문자열로 인쇄 할 수 있습니다.

a,su

몇 가지가 있기 때문에 가능한 모든 변환에 대해서는 MSDN 페이지의 표를 참조하십시오. 다양한 문자열 변형, 배열의 개별 항목을 인쇄하는 변형 등


1
제공 한 MSDN 링크를 a,[10]통해 복잡한 데이터 유형의 CArray가있는 경우에도 개별 요소를 확장 할 수 있습니다.
LThode


1

이 gem의 조사 식 창에서 변수를 사용하여 수행 할 수있는 많은 작업 목록이 문서에서 찾을 수 있습니다. https://msdn.microsoft.com/en-us/library/75w45ekt.aspx

변수 a의 경우 다른 답변에서 이미 언급 한 것들이 있습니다.

a,10 
a,su 

그러나 형식과 크기에 대한 다른 많은 지정자가 있습니다.

a,en (shows an enum value by name instead of the number)
a,mb (to show 1 line of 'memory' view right there in the watch window)

0

나는 이것을 다차원 배열과 함께 사용하는 방법을 찾지 못했습니다. 그러나 (원하는 항목의 색인을 알고 있다면) 시계를 특정 값으로 추가 할 수 있습니다. 간단히 인덱스 연산자를 사용하십시오.

내부에 Attrib라는 배열이 있고 내부에 Attrib라는 배열이있는 current라는 이름의 배열의 경우 26 번 위치를 지정하려면 다음과 같이 표시됩니다.

((*((*current).Attribs)).Attrib)[26]

오프셋을 사용할 수도 있습니다

((*((*current).Attribs)).Attrib)+25

"다음"25 개 요소가 표시됩니다. (VS2008을 사용하고 있으며 최대 25 요소 만 표시합니다).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.