Jak wyświetlić dynamicznie przydzieloną tablicę w debugerze programu Visual Studio?


144

Jeśli masz tablicę przydzieloną statycznie, debuger programu Visual Studio może łatwo wyświetlić wszystkie elementy tablicy. Jeśli jednak masz tablicę przydzieloną dynamicznie i wskazywaną przez wskaźnik, po kliknięciu + w celu jej rozwinięcia wyświetli się tylko pierwszy element tablicy. Czy istnieje łatwy sposób, aby powiedzieć debugerowi, aby pokazać mi te dane jako tablicę typu Foo i rozmiaru X?

Odpowiedzi:


196

Tak, proste. powiedz, że masz

char *a = new char[10];

pisanie w debugerze:

a,10

pokaże zawartość tak, jakby była tablicą.


10
To świetna sztuczka, ale jeśli wskaźnik wskazuje na tablicę struktur, stwierdziłem, że poszczególne elementy rozszerzone za pomocą „a, 10” w oknie obserwatora nie są same w sobie rozszerzalne. Oznacza to, że za pomocą tej metody nie możesz zagłębić się w trzeci element tablicy. Czy to jest coś, co można przezwyciężyć?
SirPentor

@SirPentor Mam ten sam problem. Znalazłeś rozwiązanie?
becko

@ becko - przeczące. To frustrujące.
SirPentor,

wow, to bezużyteczne dla struktur, możesz zobaczyć tylko nazwy zmiennych, a nie wartości
Icebone1000,

2
Dla początkujących: Jeśli wybierzesz zmienną „a”, kliknij prawym przyciskiem myszy i dodasz ją do listy obserwowanych (inspekcja), jeśli otworzysz widok debuggera na liście obserwowanych wartości (nie mogę teraz znaleźć nazwy okna), można dwukrotnie kliknąć „a” i zmienić jego nazwę na „a, X”, gdzie X to liczba elementów. Zobaczysz teraz wszystkie wartości.
darkgaze

33

Istnieją dwie metody przeglądania danych w tablicy 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
};

Jednym ze sposobów jest okno Watch (Debugowanie / Windows / Watch). Dodaj zegarek =

m4x4,16

Spowoduje to wyświetlenie danych w postaci listy:

wprowadź opis obrazu tutaj

Innym sposobem jest okno pamięci (debugowanie / Windows / pamięć). Określ adres początkowy pamięci =

m4x4

Spowoduje to wyświetlenie danych w tabeli, która jest lepsza w przypadku macierzy dwu- i trójwymiarowych:

wprowadź opis obrazu tutaj

Kliknij prawym przyciskiem myszy okno Pamięć, aby określić sposób wizualizacji danych binarnych. Wybory są ograniczone do liczb całkowitych, liczb zmiennoprzecinkowych i niektórych kodowań tekstu.


21

W oknie obserwacyjnym dodaj przecinek po nazwie tablicy i liczbie elementów, które mają być wyświetlane.


10

rewizyta:

załóżmy, że masz poniższy wskaźnik:

double ** a; // assume 5*10

następnie możesz napisać poniżej w zegarku debugowania programu Visual Studio:

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

który przerzuci go na tablicę jak poniżej i możesz wyświetlić całą zawartość za jednym razem.

double[5][10] a;

5

Dla,

int **a; //row x col

dodaj to do obejrzenia

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

Proszę, powiedz mi, nie mogę znaleźć „zegarka”. Gdzie to jest?
Egor Randomize

4

Jeszcze inny sposób, aby to zrobić, jest określony tutaj w MSDN .

Krótko mówiąc, możesz wyświetlić tablicę znaków jako kilka typów ciągów. Jeśli masz tablicę zadeklarowaną jako:

char *a = new char[10];

Możesz wydrukować go jako ciąg znaków Unicode w oknie zegarka za pomocą:

a,su

Zobacz tabele na stronie MSDN dla wszystkich różnych możliwych konwersji, ponieważ jest ich całkiem sporo. Wiele różnych wariantów ciągów, wariantów drukowania poszczególnych elementów w tablicy itp.


1
Z podanego linku MSDN - a,[10]pozwala zobaczyć poszczególne elementy, dzięki czemu można je rozszerzyć, nawet jeśli masz CArray złożonych typów danych.
LThode


1

Możesz znaleźć listę wielu rzeczy, które możesz zrobić ze zmiennymi w oknie obserwacyjnym w tym klejnocie w dokumentacji: https://msdn.microsoft.com/en-us/library/75w45ekt.aspx

W przypadku zmiennej a są rzeczy już wspomniane w innych odpowiedziach, takich jak

a,10 
a,su 

ale istnieje wiele innych specyfikatorów formatu i rozmiaru, takich jak:

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

Nie znalazłem sposobu na użycie tego z tablicą wielowymiarową. Ale możesz przynajmniej (jeśli znasz indeks żądanego wpisu) dodać zegarek do określonej wartości. Po prostu użyj operatora indeksu.

W przypadku tablicy o nazwie current, która ma wewnątrz tablicę o nazwie Attribs, która zawiera tablicę o nazwie Attrib, powinna wyglądać następująco, jeśli chcesz mieć pozycję 26:

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

Możesz także użyć przesunięcia

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

pokaże "następne" 25 elementów. (Używam VS2008, pokazuje to maksymalnie 25 elementów).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.