Как распечатать или увидеть стек вызовов метода в 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" (без кавычек.)
- В разделе "Параметры" обязательно отметьте "Автоматически продолжить после оценки".