it-swarm-id.com

Bagaimana cara menampilkan array yang dialokasikan secara dinamis di debugger Visual Studio?

Jika Anda memiliki array yang dialokasikan secara statis, debugger Visual Studio dapat dengan mudah menampilkan semua elemen array. Namun, jika Anda memiliki array yang dialokasikan secara dinamis dan diarahkan oleh sebuah pointer, array hanya akan menampilkan elemen pertama dari array ketika Anda mengklik + untuk mengembangkannya. Apakah ada cara mudah untuk memberi tahu debugger, tunjukkan data ini kepada saya sebagai array tipe Foo dan ukuran X?

142
Adam Rosenfield

Ya sederhana. katakan kamu punya

char *a = new char[10];

menulis di debugger:

a,10

akan menunjukkan kepada Anda konten seolah-olah itu adalah array.

187
shoosh

Ada dua metode untuk melihat data dalam array 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
};

Salah satu caranya adalah dengan jendela Watch (Debug/Windows/Watch). Tambahkan arloji =

m4x4,16

Ini menampilkan data dalam daftar:

enter image description here

Cara lain adalah dengan jendela Memory (Debug/Windows/Memory). Tentukan alamat mulai memori =

m4x4

Ini menampilkan data dalam sebuah tabel, yang lebih baik untuk matriks dua dan tiga dimensi:

enter image description here

Klik kanan pada jendela Memori untuk menentukan bagaimana data biner divisualisasikan. Pilihan terbatas pada bilangan bulat, float, dan beberapa penyandian teks.

32
Riaz Rizvi

Di jendela arloji, tambahkan koma setelah nama array, dan jumlah item yang ingin ditampilkan.

21
Drealmer

kunjungan kembali:

mari kita asumsikan Anda memiliki pointer di bawah ini:

double ** a; // assume 5*10

maka Anda dapat menulis di bawah ini di Visual Studio debug watch:

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

yang akan melemparkannya ke dalam array seperti di bawah ini, dan Anda dapat melihat semua konten sekaligus.

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

Untuk,

int **a; //row x col

tambahkan ini untuk ditonton

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

Namun cara lain untuk melakukan ini ditentukan di sini di MSDN .

Singkatnya, Anda dapat menampilkan array karakter sebagai beberapa jenis string. Jika Anda memiliki array yang dinyatakan sebagai:

char *a = new char[10];

Anda bisa mencetaknya sebagai string unicode di jendela arloji dengan berikut:

a,su

Lihat tabel di halaman MSDN untuk semua konversi berbeda yang mungkin karena ada beberapa. Banyak varian string yang berbeda, varian untuk mencetak masing-masing item dalam array, dll.

4
Taylor Price

Untuk array MFC (CArray, CStringArray, ...) mengikuti tautan selanjutnya di Tip # 4-nya

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

Misalnya untuk "CArray pArray", tambahkan jendela Watch

     pArray.m_pData,5 

untuk melihat 5 elemen pertama.

Jika pArray adalah CArray dua dimensi, Anda dapat melihat elemen-elemen dari dimensi kedua menggunakan sintaks berikut:

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

Anda dapat menemukan daftar banyak hal yang dapat Anda lakukan dengan variabel di jendela arloji dalam permata ini di dokumen: https://msdn.Microsoft.com/en-us/library/75w45ekt.aspx

Untuk variabel a, ada hal-hal yang sudah disebutkan dalam jawaban lain seperti

a,10 
a,su 

tetapi ada banyak penentu lain untuk format dan ukuran, seperti:

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

Saya belum menemukan cara untuk menggunakan ini dengan array multidimensi. Tetapi Anda setidaknya dapat (jika Anda tahu indeks entri yang Anda inginkan) menambahkan arloji ke nilai tertentu. Cukup gunakan indeks-operator.

Untuk Array bernama arus, yang memiliki Array bernama Attribs di dalamnya, yang memiliki Array bernama Attrib di dalamnya, akan terlihat seperti ini jika Anda ingin posisi 26:

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

Anda juga dapat menggunakan offset

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

akan menampilkan 25 elemen berikutnya. (Saya menggunakan VS2008, ini hanya menunjukkan maksimum 25 elemen).

0
wog