Просмотр динамически распределяемого массива с помощью отладчика XCode? - PullRequest
19 голосов
/ 27 января 2009

Допустим, у меня есть массив в C ++:

double* velocity = new double[100];

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

> print *velocity @ 100

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

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

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

Ответы [ 3 ]

32 голосов
/ 01 мая 2014

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

Новые версии 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 <code>array</code>
(int) 0x7fff5fbff870 = 7
(int) 0x7fff5fbff874 = 6
(int) 0x7fff5fbff878 = 9
(int) 0x7fff5fbff87c = 10
(int) 0x7fff5fbff880 = 1
(int) 0x7fff5fbff884 = 8
(int) 0x7fff5fbff888 = 4
(int) 0x7fff5fbff88c = 3
13 голосов
/ 28 января 2009

Вы можете использовать синтаксис GDB в качестве выражений:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...