it-swarm-vi.tech

Làm cách nào để hiển thị một mảng được phân bổ động trong trình gỡ lỗi Visual Studio?

Nếu bạn có một mảng được phân bổ tĩnh, trình gỡ lỗi Visual Studio có thể dễ dàng hiển thị tất cả các thành phần của mảng. Tuy nhiên, nếu bạn có một mảng được phân bổ động và được trỏ bởi một con trỏ, nó sẽ chỉ hiển thị phần tử đầu tiên của mảng khi bạn nhấp vào + để mở rộng nó. Có một cách dễ dàng để nói với trình gỡ lỗi, cho tôi xem dữ liệu này dưới dạng một mảng loại Foo và kích thước X?

142
Adam Rosenfield

Vâng, đơn giản. nói rằng bạn có

char *a = new char[10];

viết trong trình gỡ lỗi:

a,10

sẽ cho bạn thấy nội dung như thể nó là một mảng.

187
shoosh

Có hai phương pháp để xem dữ liệu trong một mảng 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
};

Một cách là với cửa sổ Watch (Gỡ lỗi/Windows/Watch). Thêm đồng hồ =

m4x4,16

Điều này sẽ hiển thị dữ liệu trong một danh sách:

enter image description here

Một cách khác là với cửa sổ Bộ nhớ (Gỡ lỗi/Windows/Bộ nhớ). Chỉ định địa chỉ bắt đầu bộ nhớ =

m4x4

Điều này hiển thị dữ liệu trong một bảng, tốt hơn cho ma trận hai và ba chiều:

enter image description here

Nhấp chuột phải vào cửa sổ Bộ nhớ để xác định cách hiển thị dữ liệu nhị phân. Lựa chọn được giới hạn ở số nguyên, số float và một số mã hóa văn bản.

32
Riaz Rizvi

Trong cửa sổ đồng hồ, thêm dấu phẩy sau tên của mảng và số lượng mục bạn muốn được hiển thị.

21
Drealmer

xem lại:

giả sử bạn có một con trỏ bên dưới:

double ** a; // assume 5*10

sau đó bạn có thể viết dưới đây trong đồng hồ gỡ lỗi Visual Studio:

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

cái này sẽ chuyển nó thành một mảng như bên dưới và bạn có thể xem tất cả nội dung trong một lần.

double[5][10] a;
10
Gengpu Liu

Cho

int **a; //row x col

thêm cái này để xem

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

Tuy nhiên, một cách khác để làm điều này được chỉ định ở đây trong MSDN .

Nói tóm lại, bạn có thể hiển thị một mảng ký tự dưới dạng một số loại chuỗi. Nếu bạn có một mảng được khai báo là:

char *a = new char[10];

Bạn có thể in nó dưới dạng một chuỗi unicode trong cửa sổ xem với thông tin sau:

a,su

Xem các bảng trên trang MSDN để biết tất cả các chuyển đổi khác nhau có thể vì có khá nhiều chuyển đổi. Nhiều biến thể chuỗi khác nhau, các biến thể để in các mục riêng lẻ trong mảng, v.v.

4
Taylor Price

Đối với mảng MFC (CArray, CStringArray, ...) theo liên kết tiếp theo trong Mẹo số 4 của nó

http://www.codeproject.com/Articles/469416/10-More-Visual-Studio-Debugging-Tips-for-Native-De

Ví dụ: "CArray pArray", hãy thêm vào cửa sổ Watch

     pArray.m_pData,5 

để xem 5 yếu tố đầu tiên.

Nếu pArray là một CArray hai chiều, bạn có thể xem xét bất kỳ yếu tố nào của chiều thứ hai bằng cú pháp tiếp theo:

     pArray.m_pData[x].m_pData,y
1
dabinsi

Bạn có thể tìm thấy danh sách nhiều thứ bạn có thể làm với các biến trong cửa sổ xem trong viên ngọc này trong tài liệu: https://msdn.Microsoft.com/en-us/l Library/75w45ekt.aspx

Đối với một biến a, có những điều đã được đề cập trong các câu trả lời khác như

a,10 
a,su 

nhưng có rất nhiều thông số kỹ thuật khác về định dạng và kích thước, như:

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)
1
Legolas

Tôi đã không tìm thấy một cách để sử dụng điều này với một mảng nhiều chiều. Nhưng ít nhất bạn có thể (nếu bạn biết chỉ số của mục nhập mong muốn của bạn) thêm đồng hồ vào một giá trị cụ thể. Đơn giản chỉ cần sử dụng toán tử chỉ mục.

Đối với một Mảng có tên hiện tại, có một Mảng có tên là Attribs bên trong, có một Mảng có tên là Attrib bên trong, nó sẽ trông như thế này nếu bạn muốn có vị trí 26:

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

Bạn cũng có thể sử dụng một phần bù

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

sẽ hiển thị ne "tiếp theo" 25 yếu tố. (Tôi đang sử dụng VS2008, điều này chỉ hiển thị tối đa 25 yếu tố).

0
wog