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

发布于 2024-11-15 23:23:35 字数 232 浏览 8 评论 0原文

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

但是,我希望也能够在所有其他活动线程上看到 callStackSymbols。我知道我可以在任何线程上使用 [NSThread callStackSymbols],但我需要循环遍历所有活动线程才能执行此操作。

这可能吗?

In the iPad app that I'm creating, I'm trying to handle the uncaught Exceptions by outputting the callStackSymbols of the exception. This can be done with [NSException callStackSymbols]

However, I'd like to be able to see the callStackSymbols on all the other active threads as well. I know I can use [NSThread callStackSymbols] on any thread, but I need to loop through all the active threads to do so.

Is this possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我的黑色迷你裙 2024-11-22 23:23:35

正如沉静的外星人所指出的,这是一个复杂的领域。您将需要实现自己的堆栈遍历以从其他活动线程检索堆栈跟踪;像 backtrace(3) 和 +[NSThread callStackSymbols] 这样的 API 只会产生当前线程的回溯。

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

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

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

This is a complex area, as Sedate Alien noted. You will need to implement your own stack walking to retrieve a stack trace from the other active threads; APIs such as backtrace(3) and +[NSThread callStackSymbols] will only produce a backtrace for the current thread.

Since I'm familiar with the PLCrashReporter code, I'll just use it for examples:

Note that all this code is a bit unusual, as it executes within a signal handler and is written to be async-safe; if you're unfamiliar with the complications around signal handling, this is a good starting point: http://www.mikeash.com/pyblog/friday-qa-2011-04-01-signal-handling.html

Implementing this kind of thing correctly is a gigantic headache; I would really recommend that you make use of PLCrashReporter, or one of the products built on top of it (QuincyKit, HockeyApp, Atlassian JMC, etc).

£冰雨忧蓝° 2024-11-22 23:23:35

这似乎充满危险,如果您需要在这里寻求帮助,则更是如此。我可以推荐 PLCrashReporter 吗?其列出的功能包括:

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

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

This seems fraught with peril, doubly so if you need to ask here for help. May I suggest PLCrashReporter? Its listed features are:

  • Implemented as a in-process fully async-safe signal handler.
  • Does not interfere with debugging in gdb
  • Handles both uncaught Objective-C exceptions and fatal signals (SIGSEGV, SIGBUS, etc)
  • Backtraces for all active threads are provided. (emphasis my own)
  • Provides full register state for the crashed thread.

Better yet, have a look at QuincyKit, a very handy wrapper around PLCrashReporter.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文