如何在Xcode中设置线程特定的断点?

时间:2010-12-08 10:18:30

标签: iphone multithreading cocoa-touch xcode breakpoints

我正在调试崩溃,其中非主线程使用UIKit绘图方法。我想在-[UIView layoutSubviews]上设置一个条件断点,只有在非主线程中执行才会触发。这可能吗?

2 个答案:

答案 0 :(得分:4)

您可以使用gdb控制台设置每个线程的断点。例如:

b -[UIView layoutSubviews] thread 2

(使用gdb“info threads”命令查看存在的线程以及gdb使用的标识符。)

我认为没有办法为每个线程设置一个断点,除了主线程(线程1),但是如果你有一个合理数量的线程,你可以为每个线程设置断点。如有必要,可以单独使用。


更新

如果由于GCD导致每线程的事情没有用处,你可以采取的另一种方法是设置一个常规断点,并为该断点设置gdb命令以转储回溯(“where”)和然后“继续”。

答案 1 :(得分:1)

a very useful bit of code可以完全满足您的要求。它也比使用断点快得多。它通过调用一些UIKit方法(setNeedsLayout,setNeedsDisplay等)并抛出一个断言(如果在主线程以外的线程上调用任何方法)来执行此操作。

它非常适合在开发过程中捕获这些类型的缺陷,但请务必记住将其从生产代码中删除。如果需要,适应AppKit也是微不足道的。