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?


144

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?

Câu trả lời:


196

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.


10
Đó là một mẹo hay, nhưng nếu con trỏ của bạn trỏ đến một loạt các cấu trúc, tôi đã thấy rằng các phần tử riêng lẻ được mở rộng bằng "a, 10" trong cửa sổ đồng hồ không thể tự mở rộng. Có nghĩa là bạn không thể đào sâu vào phần tử thứ 3 của mảng bằng phương thức này. Đó có phải là một cái gì đó có thể vượt qua?
SirPentor

@SirPentor Tôi có cùng một vấn đề. Bạn đã tìm thấy một giải pháp?
vẫy gọi

@ becko - phủ định. Thật là bực bội.
SirPentor

wow, nó vô dụng đối với các cấu trúc, bạn chỉ có thể thấy tên của các vars, không phải giá trị
Icebone1000

2
Dành cho người mới bắt đầu: Nếu bạn chọn biến "a", nhấp chuột phải và thêm vào danh sách theo dõi (kiểm tra), nếu bạn mở chế độ xem trình gỡ lỗi trong danh sách các giá trị đã xem (tôi không thể tìm thấy tên của cửa sổ ngay bây giờ), bạn có thể nhấp đúp vào "a" và đổi tên thành "a, X" trong đó X là số lượng vật phẩm. Bây giờ bạn sẽ thấy tất cả các giá trị.
bóng tối

33

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:

nhập mô tả hình ảnh ở đây

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:

nhập mô tả hình ảnh ở đây

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.


21

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ị.


10

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;

5

Cho

int **a; //row x col

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

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

Xin vui lòng, cho tôi biết, tôi không thể tìm thấy "xem". Nó đâu rồi?
Egor Ngẫu nhiên

4

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.


1
Từ liên kết MSDN mà bạn đã cung cấp - a,[10]cho phép bạn xem các yếu tố riêng lẻ để bản thân chúng có thể mở rộng, ngay cả khi bạn có CArray của các loại dữ liệu phức tạp.
LThode

1

Đố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

Bạn có thể tìm thấy một danh sách nhiều điều 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 các 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)

0

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ố).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.