Подтвердить что ты не робот

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

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

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

Возможно ли это?

4b9b3361

Ответ 1

Это сложная область, как отметил 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 и т.д.).

Ответ 2

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

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

Еще лучше, посмотрите QuincyKit, очень удобную оболочку вокруг PLCrashReporter.