Visual Studio hata ayıklayıcısında dinamik olarak ayrılmış bir dizi nasıl görüntülenir?


145

Statik olarak ayrılmış bir diziniz varsa, Visual Studio hata ayıklayıcısı tüm dizi öğelerini kolayca görüntüleyebilir. Ancak, dinamik olarak ayrılmış ve bir işaretçi ile işaretlenmiş bir diziniz varsa, diziyi genişletmek için + işaretini tıklattığınızda yalnızca ilk öğesini görüntüler. Hata ayıklayıcıyı anlatmanın kolay bir yolu var mı, bu verileri Foo ve X tipi bir dizi olarak gösterin?

Yanıtlar:


197

Evet, basit. söyle var

char *a = new char[10];

hata ayıklayıcıda yazma:

a,10

içeriği bir diziymiş gibi gösterir.


10
Bu harika bir hile, ancak işaretçiniz bir dizi yapıya işaret ediyorsa, izleme penceresinde "a, 10" ile genişleyen ayrı ayrı öğelerin kendilerinin genişletilemez olduğunu gördüm. Yani bu yöntemi kullanarak dizinin 3. öğesine giremezsiniz. Bu aşılabilecek bir şey mi?
SirPentor

@SirPentor Aynı sorunu yaşıyorum. Bir çözüm buldun mu?
becko

@ Becko - Olumsuz. Sinir bozucu.
SirPentor

vay, yapılar için işe yaramaz, sadece değerlerin değil, değişkenlerin isimlerini görebilirsiniz
Icebone1000

2
Yeni başlayanlar için: "a" değişkenini seçerseniz, sağ tıklayın ve izleme listesine ekleyin (inceleyin), izlenen değerler listesinde de hata ayıklayıcı görünümünü açarsanız (şu anda pencerenin adını bulamıyorum), "a" yı çift tıklayıp "a, X" olarak yeniden adlandırabilir; burada X, öğe sayısıdır. Artık tüm değerleri göreceksiniz.
darkgaze

33

M4x4 dizisindeki verileri görüntülemek için iki yöntem vardır:

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
};

Bunun bir yolu İzleme penceresidir (Hata Ayıklama / Windows / İzleme). İzleme ekle =

m4x4,16

Bu, verileri bir listede görüntüler:

resim açıklamasını buraya girin

Başka bir yol bir Bellek penceresi (Hata Ayıklama / Windows / Bellek). Bir bellek başlangıç ​​adresi belirtin =

m4x4

Bu, verileri iki ve üç boyutlu matrisler için daha iyi olan bir tabloda görüntüler:

resim açıklamasını buraya girin

İkili verilerin nasıl görüntüleneceğini belirlemek için Bellek penceresine sağ tıklayın. Seçenekler tamsayılar, kayan noktalar ve bazı metin kodlamaları ile sınırlıdır.


21

Bir izleme penceresinde, dizinin adından sonra ve görüntülenmesini istediğiniz öğe miktarından sonra virgül ekleyin.


10

bir tekrar:

aşağıdaki işaretçiniz olduğunu varsayalım:

double ** a; // assume 5*10

Visual Studio hata ayıklama saatinde aşağıya yazabilirsiniz:

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

aşağıdaki gibi bir diziye yayınlar ve tüm içeriği tek seferde görüntüleyebilirsiniz.

double[5][10] a;

5

İçin,

int **a; //row x col

izlemek için ekle

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

Lütfen, "izle" bulamadığımı söyle. Nerede?
Egor Rastgele

4

Bunu yapmanın başka bir yolu da burada MSDN'de belirtilmiştir .

Kısacası, bir karakter dizisini çeşitli dize türleri olarak görüntüleyebilirsiniz. Şu şekilde beyan edilmiş bir diziniz varsa:

char *a = new char[10];

İzleme penceresinde aşağıdakileri içeren bir unicode dizesi olarak yazdırabilirsiniz:

a,su

Çok az sayıda olduğundan, olası tüm dönüşümler için MSDN sayfasındaki tablolara bakın. Birçok farklı dize varyantı, dizideki öğeleri tek tek basmak için varyantlar, vb.


1
Verdiğiniz MSDN bağlantısından a,[10], karmaşık veri türlerinden oluşan bir CArray'niz olsa bile, ayrı ayrı öğeleri görmenizi sağlar.
LThode


1

Değişkenlerle yapabileceğiniz birçok şeyin listesini bu dokümanda dokümanlardaki bu mücevherde bulabilirsiniz: https://msdn.microsoft.com/en-us/library/75w45ekt.aspx

Değişken a için, diğer cevaplarda daha önce bahsedilenler vardır.

a,10 
a,su 

ancak biçim ve boyut için bir sürü başka belirtici vardır, örneğin:

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

Bunu çok boyutlu bir dizi ile kullanmanın bir yolunu bulamadım. Ancak en azından (istediğiniz girişin dizinini biliyorsanız) belirli bir değere saat ekleyebilirsiniz. Sadece dizin operatörünü kullanın.

İçinde Attribs adında bir Dizi olan ve içinde Attrib adında bir Dizi olan current adlı bir Dizi için, 26 konumunu konumlandırmak istiyorsanız şu şekilde görünmesi gerekir:

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

Bir ofset de kullanabilirsiniz

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

ne "sonraki" 25 element gösterecektir. (VS2008 kullanıyorum, bu sadece 25 element gösteriyor).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.