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

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

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

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


person bornbnid    schedule 14.06.2011    source источник


Ответы (2)


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

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

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

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

person landonf    schedule 21.06.2011
comment
Спасибо большое за указание; Но не могли бы вы помочь ответить на мои сопутствующие вопросы? stackoverflow.com/ вопросы/47071265/ - person Paradise; 02.11.2017
comment
какой отличный ответ. ссылки на API. Ссылки на пример кода. Давай! - person rustyMagnet; 29.12.2020

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

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

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

person Sedate Alien    schedule 14.06.2011
comment
Хотя это хорошее стороннее решение, я все же предпочел бы узнать о цикле через активные потоки. Даже если бы вы могли указать мне правильное направление в отношении документации, я бы нашел это более полезным. - person bornbnid; 17.06.2011
comment
Большое спасибо за эталонный ПЛК; Но не могли бы вы помочь ответить на мои сопутствующие вопросы? stackoverflow.com/ вопросы/47071265/ - person Paradise; 02.11.2017