【问题标题】:XCode breakpoint should suspend only current threadXCode 断点应该只挂起当前线程
【发布时间】:2014-05-11 22:37:35
【问题描述】:

我需要调试一个多线程错误。因此,要获得产生崩溃的条件,我需要在代码中的特定点停止一个线程并等待另一个线程到达第二个断点。

我现在遇到的问题是,如果一个线程遇到断点,所有其他线程都会挂起。有没有办法只停止一个线程,让其他线程运行,直到遇到第二个断点?

【问题讨论】:

    标签: ios objective-c xcode multithreading debugging


    【解决方案1】:

    我知道两种方法: 如果遇到第一个断点,您应该会在 xcode 左侧看到调试导航器,其中包含当前正在运行的线程列表。您当前所在的线程应该被扩展。右键单击此线程并选择“挂起线程”。就是这样。

    如果您稍后想继续,您只需点击恢复即可。 (为了查看线程,必须暂停执行,因此您要么必须处于断点才能执行此操作,要么自己暂停应用程序!)

    其他更有趣的选择:

    当你遇到第一个断点时,你可以进入控制台写

    po [NSThread sleepForTimeInterval:3600]
    

    这应该在该断点处暂停当前上下文中的线程一小时。

    然后在 Xcode 中恢复执行。

    【讨论】:

    • 顺便说一句。暂停特殊线程可能会导致意外暂停:主线程被一些 Apple 内部方法使用,并且 webthread 被所有套接字连接使用!
    • +1 我认为这可能有效(但是,我不能说我实际上已经尝试过了)。但是,您的评论有点轻描淡写。暂停主线程几乎会完全关闭应用程序的用户界面。
    • 是的^^ 但我主要想指出的是,其他不太明显的系统功能也可能不起作用!某些方法使用主线程来引导执行,至少在早期版本的 iOS 中,非原子属性确实依赖于主线程。我认为这不再是这种情况了
    猜你喜欢
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多