Вызывать макрос каждый раз, когда вызывается любой метод - Цель C - PullRequest
5 голосов
/ 06 мая 2010

Я написал макрос отладки, который выводит на консоль переданную строку всякий раз, когда глобальный kDebug флаг == YES.

Мне нужно распечатывать имя метода и имя его класса всякий раз, когда вызывается какой-либо метод.

Это прекрасно работает, когда я кропотливо просматриваю каждый метод и записываю имя класса и метод в строку.

Существует ли какой-либо специальный обработчик, который вызывается при вызове любого метода в Objective-C, и, если да, есть ли способ, которым я могу каким-то образом переопределить его для вызова моего макроса отладки?

Целью всего этого является то, что мне не нужно проходить через каждый метод в моем коде и вручную кодировать сигнатуру метода в вызове макроса отладки.

Ответы [ 4 ]

6 голосов
/ 06 мая 2010

Если вы ищете средство ведения журнала методов, а не создаете свое собственное, оно фактически встроено в среду выполнения Objective-C.

Возможно, вы захотите прочитать раздел Objective-C в Technote 2124 от Apple: Техническое примечание TN2124: магия отладки Mac OS X

Я бы также рекомендовал прочитать в блоге Дейва Дрибина сообщение об использовании средства времени выполнения для отслеживания сообщений. Вы можете найти это здесь: Отслеживание сообщений Objective-C - Блог Дэйва Дрибина . Дейв отмечает, что вызывается функция logObjCMessageSend, которую вы можете использовать для настройки своего поведения в журнале. Это немного сложно, но Дейв дает информацию, необходимую для его успешного использования.

4 голосов
/ 07 мая 2010

Взгляните на Dtrace . Instruments предоставляет графический интерфейс. Скажем, вы можете указать регулярное выражение для всех методов, которые вы хотите регистрировать.

0 голосов
/ 10 марта 2016

Я закончил с этим кодом, задав такой же вопрос здесь Как я могу записать имена каждого вызванного метода класса в Objective-C?

- (BOOL)respondsToSelector:(SEL)aSelector {
    if(aSelector){
        NSLog(@"%@", NSStringFromSelector(aSelector));
    }
    return [super respondsToSelector:aSelector];
}
0 голосов
/ 20 мая 2013

звучит так, как будто вы искали макрос __PRETTY_FUNCTION__ ... но принятый ответ, вероятно, лучший путь.

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