Как распечатать или увидеть стек вызовов метода в xcode?

Я работаю над своим iPad-приложением,

При запуске кода в представлении таблицы есть один метод.

как мы знаем

`cellForRowAtIndexPath:`

Несколько раз этот метод можно вызвать.

как

 scrolling table view cells.

 Or table view reload data.

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

Что из этого метода вызывает ячейку для строки в пути индекса.

Я использовал NSLogs и точки останова, но не смог получить.

Ответ 1

Когда вы нажмете точку останова, выберите навигатор Debug в области навигатора (в левой части окна):

debug navigator

Навигатор Debug показывает трассировку стека для каждого потока в вашем приложении. Он показывает вам по существу ту же информацию, которую вы получаете из команды gdb backtrace, но опускает обратные адреса (которые обычно не очень полезны). Используйте элементы управления в нижней части навигатора, чтобы скрыть или показать все потоки и изменить настройку количества отображаемых кадров стека. У меня есть ползунок, установленный в середине диапазона на изображении выше, и навигатор отладки пропускает кадры стека 2-18, которые являются всеми вызовами одного метода структуры в другой, т.е. Не мои вещи.

Xcode 4 должен быть настроен для автоматического отображения навигатора Debug при отладке, но если вы не можете его настроить, перейдите в Xcode- > Behaviors- > Edit Behaviors.... Затем выберите Run Приостанавливает элемент из списка и устанавливает его на Показать навигатор Навигатор отладки.

Ответ 2

Вы можете распечатать трассировку стека в NSLog с помощью

NSLog(@"Stack trace : %@",[NSThread callStackSymbols]);

EDIT: быстрый код

println("Stack trace: %@", NSThread.callStackSymbols())

Ответ 3

Вы можете установить точку останова (или приостановить приложение) и отладчика gdb записать "backtrace".

Вы должны увидеть стек:

(gdb) backtrace
#0  0x9022f7fe in mach_msg_trap ()
#1  0x9022ecdc in mach_msg ()
#2  0x022a310a in __CFRunLoopServiceMachPort ()
#3  0x02206550 in __CFRunLoopRun ()
#4  0x02205d84 in CFRunLoopRunSpecific ()
#5  0x02205c9b in CFRunLoopRunInMode ()
#6  0x024617d8 in GSEventRunModal ()
#7  0x0246188a in GSEventRun ()
#8  0x00c0ca16 in UIApplicationMain ()
#9  0x0000270d in main (argc=1, argv=0xbfeff550) at /Users/.........m:14

Ответ 4

Попробуйте установить точку останова в записи для

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

Затем щелкните правой кнопкой мыши точку останова и выберите пункт "Трассировка стека журналов и автоматическое продолжение" из пункта меню "Встроенные точки останова".

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

Это было для Xcode 3.x. Для Xcode 4 процедура немного отличается.

  • Установите точку останова.
  • Щелкните правой кнопкой мыши точку останова и выберите "Изменить Точка останова ". (Или Command - Option Нажмите на точку останова)
  • Выберите команду "Отладчик" из всплывающего окна "Действие".
  • Установите сообщение "bt" (без кавычек.)
  • В разделе "Параметры" обязательно отметьте "Автоматически продолжить после оценки".