2013-03-07 6 views
2

У меня есть контроллер вида, который продолжает перезагружать снова и снова. Я хотел бы видеть, какие методы вызывают, чтобы я мог видеть тот, который продолжает перезагружать. Я знаю, что вижу, что вызвано, если произошла ошибка, и приложение сработает. Однако в этом случае нет сбоя. Есть ли способ отслеживать все методы, вызываемые во всем приложении?Посмотрите, какие методы вызывают в Xcode

+2

просто поместите 'NSLog (« метод называется »);' в методах и он будет делать цель – nsgulliver

+1

Поместите контрольную точку в общей близости метода перезагрузки (или даже в ней), чтобы получить трассировку стека в Xcode. – CodaFi

+2

Используйте отладчик и установите точку останова на методе, который вы хотите проверить. Когда код достигнет этой точки, выполнение остановится. Посмотрите на трассировку стека в отладчике, чтобы узнать, кто ее назвал. – rmaddy

ответ

1

Использование инструментов. Запустите свой код в режиме профилирования и выберите инструмент времени процессора. По мере запуска приложения инструменты собирают информацию о каждом стеке вызовов через регулярные промежутки времени, что позволит вам узнать, что называет. (Используйте параметр «Инвертировать имя звонка», чтобы видеть вызывающих абонентов данной функции.)

3

Если вы новичок в XCode и Objective C и ищете что-то легкое, и у вас нет большого кода/многих методов, я бы положить:

NSLog(@"%s",__PRETTY_FUNCTION__); 

в каждом способе.

+0

Вы не хотите, чтобы все эти журналы заканчивались в конечном приложении Apple. – rmaddy

+0

@rmaddy вы можете установить журнал для режима отладки только – nsgulliver

+0

@rmaddy, Согласитесь, 100%. Вот почему я задал свой вопрос условиями. – Spectravideo328

1

Я использую этот макрос:

#define DEBUG 1 

#if DEBUG 
# define NLog(fmt, ...) printf("%s\n", [[NSString stringWithFormat:@"%s:%d %@", __PRETTY_FUNCTION__, __LINE__, [NSString stringWithFormat:fmt, ##__VA_ARGS__]] UTF8String]) 
#else 
# define NLog(...) 
#endif 

Тогда я включаю мой Macros.h в моем файле Application_Prefix.pch, так что он доступен везде. Перед отправкой я установил DEBUG в 0, чтобы все NLogs исчезли.

Итак, вместо использования NSLog я использую NLog. Результат выглядит примерно так:

-[ApplicationDelegate applicationDidBecomeActive:]:86 applicationDidBecomeActive called! 

Это решение было основано на этих ранних сообщений:

  1. How to print out the method name and line number and conditionally disable NSLog?
  2. Do I need to disable NSLog before release Application?

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

Смежные вопросы