我正在调试崩溃,其中非主线程使用UIKit绘图方法。我想在-[UIView layoutSubviews]
上设置一个条件断点,只有在非主线程中执行才会触发。这可能吗?
答案 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也是微不足道的。