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

17

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

double* velocity = new double[100];

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

> print *velocity @ 100

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

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

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

    
задан avalys 27.01.2009 в 19:53
источник
  • Вы имеете в виду консоль отладки, когда вы нарушаете право? XCode 4.3, похоже, поддерживает его. Спасибо за отзыв! –  Hari Karam Singh 13.02.2012 в 15:20
  • , даже если я набираю «print * velocity @ 100» или «print * velocity @ 100;» или "p * скорость @ 100;" в консоли отладчика он не будет печатать и выдавать эту ошибку: error: warningL выражение result unused error: expected ';' после ошибки выражения: 1 ошибка разбора выражения Любой намек? Благодаря! –  Zennichimaro 24.03.2013 в 03:44
  • @ Zennichimaro XCode использует lldb, а не gdb. Эквивалентом была бы скорость р * (двойная (*) [100]). Из этого ответа: stackoverflow.com/questions/7062173/... –  tronda 13.02.2015 в 10:38
  • С этим оригинальным вопросом, который был 7 лет, я бы подумал, что этот вопрос был бы тем, который был бы решен сейчас, но я не могу найти окончательного ответа. Я использую последнюю версию Xcode (7.3.1), и я не могу увидеть все содержимое массива, использующего указатель, чтобы указать на него. Какие-нибудь лучшие обходные пути в 2016 году? –  joe_04_04 07.08.2016 в 12:43

3 ответа

13

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

  1. Используйте меню Run / Show / Expressions ..., чтобы отобразить окно выражений
  2. Введите '*velocity @ 100' в нижней части окна (выражение:)
ответ дан mfazekas 28.01.2009 в 20:58
источник
  • Теперь, если только есть способ легко вывести значения из STL-векторов .... –  J. Peterson 15.12.2011 в 04:25
  • Это работает в Xcode 4? Я просто получаю «Invalid Expression» –  Keith 06.08.2012 в 06:59
28

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

Новые версии Xcode используют lldb debugger как инструмент по умолчанию вместо 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
    
ответ дан Alexander Myshov 01.05.2014 в 04:15
источник
  • Если имя вашего массива имеет все шестнадцатеричные значения, например ABC, xcode попытается прочитать значения, начинающиеся с адреса 0xABC. Вы можете обойти это, поставив вместо этого «0 + ABC» (включая кавычки) –  Nathan FD 21.09.2017 в 02:07
0

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

    
ответ дан Stefan Arentz 27.01.2009 в 21:13
источник