gpt4 book ai didi

multithreading - 如何查看是什么在 Xcode 中启动了一个线程?

转载 作者:行者123 更新时间:2023-12-04 04:30:24 24 4
gpt4 key购买 nike

我被要求调试和改进一个复杂的多线程应用程序,它由我无法访问的人编写,它使用并发队列(GCD 和 NSOperationQueue)。我无法访问多线程架构的计划,也就是说,什么时候应该发生的高级设计文档。我需要制定这样的计划,以了解应用程序的工作原理和功能。

在运行代码和调试时,我可以在 Xcode 的 Debug Navigator 中看到正在运行的各种线程。 有没有办法识别特定线程在源代码中的哪里产生?有没有办法确定 NSOperation 属于哪个 NSOperationQueue?

例如,我可以在调试导航器(或使用 LLDB 的“线程回溯”命令)中看到线程的堆栈跟踪,但我可以查看的“最早”用户代码是被覆盖的 (NSOperation*) start方法 - 在堆栈中更早地退后,仅显示调用该方法的框架的汇编指令(例如 __block_global_6_dispatch_call_block_and_release 等)。

我已经调查并寻求了各种调试方法,但没有成功。我得到的最接近的是方法调配的想法,但我认为这不适用于排队的 NSOperation 线程。请原谅我的含糊不清:我知道看起来像我一样努力,我可能问错了问题,因此可能在我自己的脑海中没有很清楚地形成这个问题,但我在问社区求助!
谢谢

最佳答案

我能想到的最好的方法是在 dispatch_async 上放置断点, -[NSOperation init] , -[NSOperationQueue addOperation:]等等。您可以配置这些断点以记录它们的堆栈跟踪,可能还有其他一些信息(例如 dispatch_async 的块地址,或 addOperation: 的队列和操作地址),然后继续运行。然后,当您对特定块的来源感到好奇时,可以查看日志并查看调用了什么以及从哪里调用。 (这仍然需要一些侦探工作。)

你也可以用 dtrace 完成类似的事情。如果断点方法太慢。

关于multithreading - 如何查看是什么在 Xcode 中启动了一个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16511362/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com