Как напечатать строковое значение из действия точки останова в Xcode 4? - PullRequest
20 голосов
/ 13 апреля 2009

У меня есть действие точки останова, и я использую опцию Log из выпадающего списка. Я хотел бы распечатать строковое (итоговое) значение. Я делаю это:

the person name is: @p.name@

но это печатает адрес памяти. Я могу переключиться на параметр «Команда отладчика» и сделать

po f.name

но тогда я теряю свое описание, использованное в первом варианте. С помощью параметра «Журнал» можно ли печатать строковое значение, а не адрес памяти?

Ответы [ 5 ]

26 голосов
/ 28 июля 2012

Вы можете использовать операторы NSLog с точками останова, используя «Команду отладчика», но вам нужно добавить «expr»

expr (void)NSLog(@"The Person Name is %@", p.name)

-

using expr command with a Debugger Command as breakpoint in Xcode 4.4

18 голосов
/ 13 апреля 2009

Есть пара вещей, которые вы можете сделать. Добавьте функцию журнала из раскрывающегося списка, затем добавьте еще одно поле и выберите Debugger Command и введите po f.name.

Если вы хотите, чтобы ваш журнал был более сложным, вы можете сделать что-то более похожее на это:

the person name is: @(const char *)[(NSString*)[p.name description] UTF8String]@

Лучше всего вам просто использовать графический интерфейс отладчика для наблюдения за переменными. Если вы хотите регистрировать сообщения, используйте NSLog.

8 голосов
/ 20 июня 2013

Вот решение, использующее только одно действие и использующее меньше символов, чем решение expr.

debugger command using NSlog

Однако, если вы не добавите void следующим образом:

po (void)NSLog(@"the person name is: %@", p.name)

вы получите раздражающую ноль, распечатанную с вашим журналом. например:

(lldb) po NSLog(@"foo")
 nil
2013-06-19 14:42:59.025 TheMove[95864:c07] foo

(lldb) po (void)NSLog(@"foo")
2013-06-19 14:43:10.758 TheMove[95864:c07] foo

Если вы можете жить с нулем (я могу), то быстрее набрать текст и легче запомнить только po

4 голосов
/ 06 марта 2012

Я использовал 2 разных действия для одной и той же точки останова. Сначала Журнал, а затем команда отладчика с po varName. Единственный недостаток - печать в 2 разных рядах.

enter image description here

0 голосов
/ 03 ноября 2018

Вам не нужно ДВУХ действий в точке останова, вы можете просто использовать команду ONE (сообщение журнала), в которую вы помещаете сообщение, включая содержимое переменных (см. Изображение ). Нажав «автоматически продолжить», вы просто действуете, как если бы в коде была команда print, но хорошо, что в вашем коде нет операторов print.

enter image description here

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