как создать действие сообщения журнала точки останова в xcode?

Посмотрели сегодня видео WWDC о новых функциях в xCode 4. Они упомянули, что неплохо использовать действия с сообщениями журнала в точках останова вместе с включенной функцией «автоматически продолжать после оценочных действий» для вывода значения переменной, например, вместо использования NSLogs all время.

скажем, у меня есть что-то вроде этого:

NSLog(@"URL is : %@", userDocumentsURL);

Как мне написать действие сообщения журнала для отображения значения userDocumentsURL? Действительно ли лучше использовать вышеуказанный метод вместо NSLog?


person PrimeSeventyThree    schedule 09.11.2011    source источник


Ответы (3)


Создайте действие «Сообщение журнала» точки останова. Для сообщения журнала укажите что-то вроде:

URL is @(char*) [[userDocumentsURL description] UTF8String]@

В качестве альтернативы вы можете создать действие точки останова «Команда отладчика», подобное следующему:

po [NSString stringWithFormat:@"URL is: %@", userDocumentsURL]

Я предпочитаю использовать действия точки останова для ведения журнала, поскольку, возможно, легче очистить кучу точек останова, чем удалить NSLogs. Возможным недостатком такого использования точек останова является то, что они работают значительно медленнее (во время отладки), чем прямой NSLog.

person Josh    schedule 17.11.2011
comment
Хотел бы я знать, почему a: отладчик настолько глуп, что требует приведения char *, и b: он не работает половину времени, а c: документация Apple не дает понять, что вам нужны char * и d: почему он не пожаловаться, если переменные не существуют, чтобы помочь вам отладить. Сравните с точками останова Eclipse для Java, которые даже не имеют этой функции, поэтому они должны быть намного хуже, но позволяют вам взломать его, поместив печать в условие. Это раздражает затмение, но даже в этом случае это намного проще, поскольку печать не требует специального литья, она остановится и сообщит вам об ошибках. - person Rhubarb; 09.11.2012

Вот аналогичное решение с использованием NSLog, в котором может быть меньше символов, чем в других решениях.

команда отладчика с использованием 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

person Skotch    schedule 19.06.2013

Я заметил, что функция редактирования точек останова, хотя и полезна и, возможно, современна, но не привязана к системе управления версиями, поэтому не масштабируется для команды разработчиков. По этой причине я бы сказал, что при работе в команде под контролем версий следует придерживаться ведения журнала на основе кода, такого как NSLog.

person Barton Friedland    schedule 21.09.2012
comment
Я считаю, что это произойдет, если вы выберете правильные параметры общего доступа в редакторе точки останова. Я сам не использую эту функцию (индивидуальный разработчик), но переговоры WWDC показывают, что совместное использование интегрируется с системой управления версиями. - person mbm29414; 03.10.2012
comment
На мой взгляд, не заставлять читать все отладочные данные других членов команды - это профи. Вам не нужно очищать NSLog (или // перед NSLog) перед фиксацией. Я работал в команде, где в 1 из 10 коммитов было удалено ведение журнала, добавлено больше NSLog, изменен NSLog на более / менее подробный или что-то еще, связанное с ведением журнала. - person Matthias Bauch; 08.02.2013
comment
Как только что прокомментировал @MatthiasBauch, это тоже может быть полезно. И, с другой стороны, вы должны знать, что есть некоторые варианты использования, когда вы не хотите перезапускать приложение, но хотели бы видеть журнал в отладчике, так что это будет единственная возможность сделать это. - person Alex Cio; 04.03.2015