尝试调试AutoLayout问题(在某些情况下,表单元格应根据其内容的大小而增长)时,我在tableView:heightForRow:
方法的最后一行设置了一个断点,并尝试打印该值的systemLayoutSizeFittingSize:
我得到这个:
(lldb) p ((CGSize)[cachedCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]).height
2014-10-14 11:15:49.492 AppName[72132:10302054] This NSLayoutConstraint is being configured with a constant that exceeds internal limits. A smaller value will be substituted, but this problem should be fixed. Break on void _NSLayoutConstraintNumberExceedsLimit() to debug. This will be logged only once. This may break in the future.
(CGFloat) $0 = 57
好吧,那很有趣。但是我尝试按照它说的做,并在该函数上设置一个断点:
...并且此断点不会受到攻击。
(令人讨厌的是,它似乎在某些情况下有效,但在其他情况下则无效,我看不出设置有什么区别。)
最佳答案
从符号名称中省略()
。如果您使用调试器控制台窗口通过breakpoint set --name
命令设置此断点,则发生的情况会更清楚一些:
(lldb) br s -n _NSLayoutConstraintNumberExceedsLimit()
Breakpoint 1: no locations (pending).
WARNING: Unable to resolve breakpoint to any actual locations.
(lldb) br s -n _NSLayoutConstraintNumberExceedsLimit
Breakpoint 2: where = Foundation`_NSLayoutConstraintNumberExceedsLimit, address = 0x00007fff9168e6f5
(lldb)
如果您在Xcode调试 session 中使用了
breakpoint list
(br l
)命令,您会发现_NSLayoutConstraintNumberExceedsLimit()
断点未在任何位置设置。