Технические вопросы и ответы QA1669

Улучшенный входящий в систему Objective C

Q: Как я могу добавить контекстную информацию - такую как существующий метод или номер строки - к моим операторам журналирования?

A: Препроцессор C обеспечивает много стандартных макросов, которые дают Вам информацию о текущем файле, номере строки или функции. Кроме того, Objective C имеет _cmd неявный параметр, дающий селектор существующего метода и функционирующий для преобразования селекторов и классов строк. Можно использовать их в Вашем NSLog операторы для обеспечения полезного контекста во время отладки или обработки ошибок.

  Пример перечисления 1 журналирования существующего метода и номера строки. Вставьте его в свой проект и посмотрите то, что это распечатывает!

NSMutableArray *someObject = [NSMutableArray array];
NSLog(@"%s:%d someObject=%@", __func__, __LINE__, someObject);
[someObject addObject:@"foo"];
NSLog(@"%s:%d someObject=%@", __func__, __LINE__, someObject);

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

Табличные 1  макросы Препроцессора и для входа в систему C/C ++/Objective-C.

Макрос

Спецификатор формата

Описание

__ func __

%s

Текущая функциональная подпись.

__ СТРОКА __

%d

Текущий номер строки в файле исходного кода.

__ ФАЙЛ __

%s

Полный путь к файлу исходного кода.

__ PRETTY_FUNCTION __

%s

Как __ func __, но включает многословную информацию о типе в код C++.

Табличные 2  Выражения для входящего в систему Objective C.

Выражение

Спецификатор формата

Описание

NSStringFromSelector (_cmd)

%@

Имя текущего селектора.

NSStringFromClass ([сам класс])

%@

Имя класса текущего объекта.

[[NSString stringWithUTF8String: __ FILE __] lastPathComponent]

%@

Имя файла исходного кода.

[NSThread callStackSymbols]

%@

NSArray текущего отслеживания стека как читаемые программистом строки. Для отладки только, не представляйте его конечным пользователям или использованию, чтобы сделать любую логику в Вашей программе.



История версии документа


ДатаПримечания
04.10.2011

Расширенные примеры журналирования.

27.10.2009

Новый документ, описывающий использование макросов препроцессора и функций языка Objective C для обеспечения лучшего контекста в операторах журнала.