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

Objective c 如何在iPad应用程序中循环所有活动线程,objective-c,multithreading,ios,callstack,Objective C,Multithreading,Ios,Callstack,在我正在创建的iPad应用程序中,我试图通过输出异常的CallStackSymbol来处理未捕获的异常。这可以通过[NSException callStackSymbols] 但是,我也希望能够在所有其他活动线程上看到callStackSymbols。我知道我可以在任何线程上使用[NSThread callStackSymbols],但我需要遍历所有活动线程才能这样做 这可能吗?这似乎充满了危险,如果你需要在这里寻求帮助,情况更是如此。我可以建议你吗?其特点如下: 实现为进程内完全异步安全的信

在我正在创建的iPad应用程序中,我试图通过输出异常的CallStackSymbol来处理未捕获的异常。这可以通过
[NSException callStackSymbols]

但是,我也希望能够在所有其他活动线程上看到callStackSymbols。我知道我可以在任何线程上使用
[NSThread callStackSymbols]
,但我需要遍历所有活动线程才能这样做


这可能吗?

这似乎充满了危险,如果你需要在这里寻求帮助,情况更是如此。我可以建议你吗?其特点如下:

  • 实现为进程内完全异步安全的信号处理程序
  • 不干扰gdb中的调试
  • 处理未捕获的Objective-C异常和致命信号(SIGSEGV、SIGBUS等)
  • 为所有活动线程提供回溯。(我自己强调)
  • 提供崩溃线程的完整寄存器状态

更好的是,看一看,一个非常方便的包装周围的PLCrashReporter

这是一个复杂的区域,正如稳重的外星人所指出的。您需要实现自己的堆栈遍历,以从其他活动线程检索堆栈跟踪;诸如回溯(3)和+[NSThread callStackSymbols]之类的API只会为当前线程生成回溯

由于我熟悉PLCrashReporter代码,因此我仅将其用作示例:

  • 要获取线程列表,您需要使用:

  • 获得线程列表后,可以通过以下方式获取线程状态:

  • 使用线程状态,可以遍历目标堆栈:

请注意,所有这些代码都有点不寻常,因为它在信号处理程序中执行,并且编写为异步安全的;如果您不熟悉信号处理的复杂性,这是一个很好的起点:


正确实施这类事情是一件非常头痛的事情;我真的建议您使用PLCrashReporter,或者在它之上构建的一个产品(,,等等)。

虽然这是一个很好的第三方解决方案,但我还是更愿意学习通过活动线程进行循环。即使你能为我指出正确的方向,我也会发现这更有用。Thx仅供参考;但是你能帮我回答相关的问题吗?谢谢你的指点;但是你能帮我回答相关的问题吗?多好的回答啊。链接到API。链接到示例代码。加油!