Xcode 4 / gdb / Как просто посмотреть свойства объекта? - PullRequest
4 голосов
/ 17 сентября 2011

Я очень запутался в Xcode 4. Наблюдение за простой переменной - это кошмар. Я не придумываю, как просто «посмотреть значение переменной». В Xcode 3 было проще ...

У меня есть следующий фрагмент кода:

if (labelEast.center.x > (east_oldPosition.x + 50) )
        NSLog(@"Time to switch to previous exercise !");
    else if (labelEast.center.x < (east_oldPosition.x - 50) )
        NSLog(@"Time to switch to next exercise !");

После установки точки останова я просто пытаюсь посмотреть labelEast.center.x (labelEast - это UILabel объект). Поскольку я не смог найти элемент часов в меню Xcode 4, я пытаюсь использовать gdb. Я привык печатать значения переменных / объектов с помощью po (печать объекта). Но теперь я не могу отобразить свойство labelEast center, поскольку оно унаследовано от родительского класса.

(gdb) po labelEast.center
Нет члена с именем center.

Я не понимаю, почему GDB говорит это, тогда как код работает нормально и видит свойство.

Таким образом, у меня есть 2 вопроса:

  1. Как просмотреть такое свойство без GDB в графическом виде (так же просто, как в Visual Studio)?
  2. Как сделать то же самое с GDB?

Большое спасибо, Franz


К сожалению, я пробовал это, но получил это:

po [labelSouth center]

Программа получила сигнал EXC_BAD_ACCESS, Не удалось получить доступ к памяти. Причина: KERN_INVALID_ADDRESS по адресу: 0x1a000356 0x343c7d06 in objc_msgSend_stret () Отлаживаемая программа сигнализировала, пока функция вызывается из GDB. ГБД остается в кадре, где сигнал был получен. Чтобы изменить это поведение, используйте «set unwindonsignal on» Оценка выражения, содержащего функцию (objc_msgSend) будут заброшены.

И когда я пытаюсь:

(gdb) печать этикеткиSouth.center
Нет члена с именем center.

Я действительно подозреваю, что в UILabel нет доступа к собственности центра. Но как мне выполнить код ???

1 Ответ

12 голосов
/ 17 сентября 2011

Я сам несколько раз ударил по этому поводу, просто чтобы вспомнить: «О, это верно, GDB не поддерживает точечную нотацию, поэтому я должен использовать getter». Тогда просто сделайте:

(gdb) po [myObject someProperty]

и снова все хорошо с миром. Также перечитывая ваш вопрос, я вижу, что вы запрашиваете не объект для печати, следовательно, вы должны дать gdb подсказку, какой тип свойства вы хотите напечатать:

(gdb) p (CGRect)[myView frame]
(gdb) p (CGPoint)[myView center]

и т. Д.

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