Как просмотреть все активные темы в приложении для iPad

В создаваемом мною приложении для iPad я пытаюсь обработать необработанные исключения, выдавая callStackSymbols исключения. Это может быть сделано с [NSException callStackSymbols]

Тем не менее, я хотел бы иметь возможность видеть callStackSymbols на всех других активных потоках. Я знаю, что могу использовать [NSThread callStackSymbols] в любом потоке, но мне нужно перебрать все активные потоки, чтобы сделать это.

Это возможно?

2 ответа

Решение

Это сложная область, как отметил Седате Чужой. Вам нужно будет реализовать свой собственный обход стека, чтобы получить трассировку стека из других активных потоков; Такие API, как backtrace(3) и +[NSThread callStackSymbols], будут создавать только обратную трассировку для текущего потока.

Так как я знаком с кодом PLCrashReporter, я просто буду использовать его для примеров:

Обратите внимание, что весь этот код немного необычен, так как он выполняется внутри обработчика сигнала и написан так, чтобы быть асинхронным; если вы не знакомы со сложностями, связанными с обработкой сигналов, это хорошая отправная точка: http://www.mikeash.com/pyblog/friday-qa-2011-04-01-signal-handling.html

Реализация такого рода вещей - гигантская головная боль; Я действительно рекомендую вам использовать PLCrashReporter или один из продуктов, построенных на его основе ( QuincyKit, HockeyApp, Atlassian JMC и т. Д.).

Кажется, это чревато опасностью, вдвойне, если вам нужно обратиться за помощью. Могу ли я предложить PLCrashReporter? Его перечисленные особенности:

  • Реализован как полностью обработанный асинхронный обработчик сигнала.
  • Не мешает отладке в gdb
  • Обрабатывает как необработанные исключения Objective-C, так и фатальные сигналы (SIGSEGV, SIGBUS и т. Д.)
  • Обратные следы для всех активных тем предоставляются. (акцент мой)
  • Предоставляет полное состояние регистра для потерянного потока.

Еще лучше взглянуть на QuincyKit, очень удобную оболочку для PLCrashReporter.

Другие вопросы по тегам