Подтвердить что ты не робот

Просмотр динамически распределенного массива с помощью отладчика Xcode?

Скажем, у меня есть массив в С++:

double* velocity = new double[100];

Используя командную строку GDB, я могу просмотреть этот массив с помощью команды:

> print *velocity @ 100

и он напечатает красиво отформатированный список всех двойных значений внутри массива.

Однако при использовании отладчика Xcode наибольшее его действие будет рассматривать это как указатель на одно двойное значение и отображать скорость [0] в списке переменных.

Это делает его реальной PITA для отладки программ, содержащих большой динамически выделенный массив. Должен быть какой-то способ рассказать Xcode "Это указатель на массив длиной 100", и он отображает предмет как таковой. Кто-нибудь знает, что это такое?

4b9b3361

Ответ 1

Вы можете использовать синтаксис gdb как выражения:

  • Используйте меню Run/Show/Expressions..., чтобы отобразить окно выражений
  • Введите '*velocity @ 100' в нижней части окна (Expression:)

Ответ 2

Я думаю, что мой ответ будет хорошим дополнением к старому.

Новые версии Xcode используют отладчик lldb как инструмент по умолчанию вместо gdb.

В соответствии с этой страница:

С выпуском Xcode 5 отладчик LLDB становится основой для процесса отладки в OS X.

Итак, для Xcode с версии 5 и выше я использую эту команду lldb:

memory read -t int -c8 `array_name`

где:
8 - количество элементов в массиве
array_name - имя массива
int - тип массива

Результат выполнения этой команды будет примерно таким:

(lldb) memory read -t int -c8 array
(int) 0x7fff5fbff870 = 7
(int) 0x7fff5fbff874 = 6
(int) 0x7fff5fbff878 = 9
(int) 0x7fff5fbff87c = 10
(int) 0x7fff5fbff880 = 1
(int) 0x7fff5fbff884 = 8
(int) 0x7fff5fbff888 = 4
(int) 0x7fff5fbff88c = 3

Ответ 3

Нет, к сожалению, GUI ограничен, и вам нужно будет хорошо сочетать магию GDB, чтобы все было сделано.

Ответ 4

Начиная с Xcode 10, вы можете щелкнуть правой кнопкой мыши velocity, выбрать "Показать значение как...", а затем "Пользовательский тип". Затем приведите его к (double(&)[100]) *velocity и отобразите массив в графическом интерфейсе.