Как печатать строковое значение из действия точки останова в Xcode 4?
У меня есть действие точки останова, и я использую параметр Log из раскрывающегося списка. Я хотел бы распечатать значение строки (summary). Я делаю это:
the person name is: @[email protected]
но печатает адрес памяти. Я могу переключиться на команду "Команда отладчика" и сделать
po f.name
но затем я теряю свое описание, которое используется в первом варианте. Используя параметр "Журнал", существует ли способ распечатать строковое значение, а не адрес памяти?
Ответы
Ответ 1
Есть несколько вещей, которые вы можете сделать. Добавьте функцию журнала из раскрывающегося списка, затем добавьте еще одно поле и выберите Debugger Command
и введите po f.name
.
Если вы хотите, чтобы ваш журнал был более сложным, вы могли бы сделать что-то более похожее на это:
the person name is: @(const char *)[(NSString*)[p.name description] UTF8String]@
Лучше всего использовать графический интерфейс отладчика для просмотра переменных. Если вы хотите регистрировать сообщения, используйте NSLog
.
Ответ 2
Вы можете использовать инструкции NSLog с точками останова с помощью команды "Debugger Command", но вам нужно добавить "expr"
expr (void)NSLog(@"The Person Name is %@", p.name)
-
![using expr command with a Debugger Command as breakpoint in Xcode 4.4]()
Ответ 3
Вот решение, использующее только одно действие и использующее меньшее количество символов, чем решение 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
Если вы можете жить с nil (я могу), это быстрее ввести и легче запомнить только po
Ответ 4
В итоге я использовал 2 разных действия для одной и той же точки останова. Сначала войдите в систему, а затем команду отладчика с именем po varName. Только нижняя сторона будет печатать в двух разных строках.
![enter image description here]()