【问题标题】:How To Loop Through All Active Thread in iPad app如何在 iPad 应用程序中循环遍历所有活动线程
【发布时间】:2011-09-15 03:01:16
【问题描述】:

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

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

这可能吗?

【问题讨论】:

    标签: objective-c multithreading ios callstack


    【解决方案1】:

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

    由于我对 PLCrashReporter 代码比较熟悉,所以我就拿它来举例:

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

    正确实施这种事情是一件非常头疼的事情;我真的建议您使用 PLCrashReporter,或基于它构建的产品之一(QuincyKitHockeyAppAtlassian JMC 等)。

    【讨论】:

    【解决方案2】:

    这似乎充满了危险,如果您需要在这里寻求帮助,那就更危险了。我可以建议PLCrashReporter 吗?其列出的功能是:

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

    更好的是,看看QuincyKit,它是PLCrashReporter 的一个非常方便的包装器。

    【讨论】:

    • 虽然这是一个很好的第三方解决方案,但我还是更愿意学习循环通过活动线程。即使您可以在文档方面为我指明正确的方向,我也会发现这更有帮助。
    • 感谢 PLC 参考;但是你能帮忙回答我的相关问题吗? stackoverflow.com/questions/47071265/…
    猜你喜欢
    • 2012-08-06
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-25
    • 2023-02-16
    • 1970-01-01
    相关资源
    最近更新 更多