如何在iPad应用程序中循环遍历所有活动线程

| 在我正在创建的iPad应用中,我试图通过输出异常的callStackSymbols来处理未捕获的异常。可以用
[NSException callStackSymbols]
完成 但是,我也希望能够在所有其他活动线程上看到callStackSymbols。我知道我可以在任何线程上使用
[NSThread callStackSymbols]
,但是我需要遍历所有活动线程才能这样做。 这可能吗?     
已邀请:
        正如Sedate Alien指出的,这是一个复杂的领域。您将需要实现自己的堆栈遍历,以从其他活动线程中检索堆栈跟踪。诸如backtrace(3)和+ [NSThread callStackSymbols]之类的API只会为当前线程生成一个backtrace。 由于我熟悉PLCrashReporter代码,因此仅将其用作示例: 要获取线程列表,您需要使用task_threads():https://opensource.plausible.coop/stash/projects/PLCR/repos/plcrashreporter/browse/Source/PLCrashLogWriter.m?at=refs%2Ftags %2F1.0#694 一旦有了线程列表,就可以通过thread_get_state()获取线程状态:https://opensource.plausible.coop/stash/projects/PLCR/repos/plcrashreporter/browse/Source/PLCrashFrameWalker_arm.c?at=refs% 2Ftags%2F1.0#73 使用线程状态,您可以遍历目标的堆栈: https://opensource.plausible.coop/stash/projects/PLCR/repos/plcrashreporter/browse/Source/PLCrashFrameWalker_arm.c?at=refs%2Ftags%2F1.0#104 注意,所有这些代码都是有点不寻常,因为它在信号处理程序中执行并且被编写为异步安全的。如果您不熟悉信号处理方面的复杂性,那么这是一个很好的起点: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的非常方便的包装器。     

要回复问题请先登录注册