Eclipse-C++-Debugging: вижте съдържанието на масив

Възможно ли е да видите съдържанието на динамично разпределен масив, както в:

int *array = new int[dimension];

Виждам само стойността на показалеца.

редактиране: току-що намерих опцията "показване като масив", но винаги трябва ръчно да въвеждам размера на масива. Възможно ли е да го получите автоматично?


person brandstaetter    schedule 01.12.2009    source източник


Отговори (4)


В Eclipse, за да видите съдържанието на динамично разпределен масив (за всеки друг, който се натъкне на този въпрос),

  1. Уверете се, че сте в перспективата за отстраняване на грешки;
  2. Потърсете прозореца Променливи. ако не го виждате, щракнете върху Прозорец › Покажи изглед › Променливи;
  3. Щракнете с десния бутон върху променливата на масива;
  4. Щракнете върху показване като масив...;
  5. Eclipse не знае колко голям е вашият масив. Така че въведете 0 за начален индекс и изберете броя на елементите, динамично разпределени за дължината. Разбира се, можете да използвате тези стойности, за да покажете всяка част от масива по ваш вкус.

изберете показване като масив в eclipse

И като се занимавате с указател, обърнете внимание на щракването върху „Показване като масив“, когато задържите курсора върху самия показалец (икона със стрелка), а не върху стойността, към която се позовава първоначално (да речем в позицията на (x)= counts на снимката). В противен случай ще получите грешка от типа

Неуспешно изпълнение на MI команда:
-data-evaluate-expression [specifics]
Съобщение за грешка от задния край на дебъгера:
Не може да се осъществи достъп до паметта на адрес 0x[адрес на по-стар *counts]

показвайки се в диалоговия прозорец точно под списъка (започвайки с Име: на екранната снимка по-горе).

person Alexander Taylor    schedule 22.01.2012
comment
Страхотен отговор! Но какво ще стане, ако масивът е 2d, напр. int samples[10][dimension];? Има ли начин да се визуализират и такива масиви? - person Jianyu; 16.10.2020

Ако искате да избегнете многократното изпълнение на „Показване като масив“, отворете раздела „Изрази“ и добавете израза (*array@dimension). Не знам защо са необходими скобите. Без тях ще получите грешка.

person cleong    schedule 08.05.2014

В раздела „Изрази“, ако направите това, което cleong отбеляза и въведете (*array@dimension), тогава можете динамично да зададете и размера на масива, който да се показва. Това работи дори когато имате нужда от друг израз, за ​​да го получите.

Да кажем, че имате променлива x, която съдържа размера на вашия масив, въвеждате (*array@x) и тя ще използва съдържанието на x като измерение.

"x" също може да бъде неща като съдържание на структура или дереференции на указател и други подобни - т.е.

(*array@SomePtrToStruct->x) 

работи добре.

person Will Rouesnel    schedule 20.05.2014

току-що намерих опцията "показване като масив", но винаги трябва ръчно да въвеждам размера на масива. Възможно ли е да го получите автоматично?

Това е добре. Бих се придържал към него. Получаването на масива автоматично не е възможно в общия случай в C или C++, въпреки че със сигурност в някои тривиални случаи може да се направи (но вероятно все още не е - функциите трябва да бъдат внедрени, преди да съществуват, за да перифразираме Реймънд Чен).

person John Zwinck    schedule 02.12.2009