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

bor*_*nid 12 multithreading callstack objective-c ios

在我正在创建的iPad应用程序中,我正在尝试通过输出异常的callStackSymbols来处理未捕获的异常.这可以通过以下方式完成[NSException callStackSymbols]

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

这可能吗?

lan*_*onf 25

Sedate Alien指出,这是一个复杂的领域.您需要实现自己的堆栈遍历以从其他活动线程中检索堆栈跟踪; 诸如backtrace(3)和+ [NSThread callStackSymbols]之类的API只会为当前线程产生回溯.

由于我熟悉PLCrashReporter代码,我只是用它作为例子:

请注意,所有这些代码都有点不寻常,因为它在信号处理程序中执行并被编写为异步安全; 如果你不熟悉信号处理的复杂性,这是一个很好的起点:http://www.mikeash.com/pyblog/friday-qa-2011-04-01-signal-handling.html

正确地实施这种事情是一个巨大的头痛; 我真的建议您使用PLCrashReporter或其上构建的产品之一(QuincyKit,HockeyApp,Atlassian JMC等).