iOS 使用符号断点定位警告约束警告-[LayoutConstraints] Unable to simultaneously satisfy constraints


约束的警告

在使用Masonry的过程中发现有时候会有一些约束警告:

[LayoutConstraints] Unable to simultaneously satisfy constraints.

    Probably at least one of the constraints in the following list is one you don't want. 

    Try this: 
        (1) look at each constraint and try to figure out which you don't expect; 
        (2) find the code that added the unwanted constraint or constraints and fix it. 
    (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, 
refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 

[
    <MASLayoutConstraint:0x1c02a3240 XXXView:0x12bb7f790.bottom == UIView:0x12bb6b4f0.bottom>,
    <MASLayoutConstraint:0x1c02a3360 XXXView:0x12bb7f790.top == XXXView:0x12bb76600.bottom>,
    <NSAutoresizingMaskLayoutConstraint:0x1c468af00 XXXView:0x12bb76600.(null) == 27>,
    <NSAutoresizingMaskLayoutConstraint:0x1c048eb00 XXXView:0x12bb76600.height == 54>,
    <NSAutoresizingMaskLayoutConstraint:0x1c0298ec0 UIView:0x12bb6b4f0.height == UIView:0x129530e50.height>,
    <NSAutoresizingMaskLayoutConstraint:0x1c0299370 UIView:0x129530e50.height == XXXView:0x129530800.height>,
    <NSLayoutConstraint:0x1c468a640 XXXView:0x129530800.height == 0>,
]

Will attempt to recover by breaking constraint 
<MASLayoutConstraint:0x1c02a3360 XXXView:0x12bb7f790.top == XXXView:0x12bb76600.bottom>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

警告里面也提示了可以设置一个符号断点定位到有隐患的地方:
UIViewAlertForUnsatisfiableConstraints

使用符号断点定位警告

符号断点.png
符号断点-方法.png

下面开始最重要部分,断点的可编辑项。
从编辑界面可以看到断点可编辑的项有SymbolModuleConditionIgnoreActionOptions

Symbol

断点触发函数。有两种函数写法,一种是C函数样式,一种是OC方法样式。
C函数样式只需要写函数名,不用写后面的()和参数。例如NSLog。
OC方法样式的[className methodName] className是类名,methodName是方法名(不区分类方法和实例方法)。
如果写标记的这个类的方法被子类重写了则子类的方法也会触发断点。
例如[UIViewController viewDidLoad]。

Module 模块筛选

可以避免不同库中方法名或者函数名相同。

Condition 触发条件

这里可以添加一些指定触发条件,比如添加第一个参数不能为nil。
这里$arg3代表第1个参数,$arg4代表第2个参数,以此类推。
这里也可以调用方法来判断,但必须是类方法,并且返回值必须为BOOL类型。
比如:找出给[UIImage imageNamed:]传nil的代码。
这里就需要设置Symbol为[UIImage imageNamed:],然后Condition设置为$arg3 == nil。
这样在运行中如果遇到传nil就会触发断点。

Ignore 触发开始次数

设置这个值可以忽略前面指定次数的触发。比如可以忽略之前的3次触发,只看第4次的触发。

Action 触发活动

这里是当断点触发后要执行的动作,可以添加多条,执行的顺序是从上到下。
一共有6种可执行类型。

AppleScript 脚本

会在断点触发的时候执行Mac OS X内置的一种功能强大的脚本语言,具体写法可以自行搜索AppleScript。

Capture GPU Frame GPU帧捕获

调试跟GPU相关的问题

Debugger Command

会在断点触发的时候执行LLDB命令。可以打印对象、修改对象值等功能。

Log Message

会在断点触发的时候打印日志。
其中@exp@打印对象值,exp为对象名;
%B表示断点名;%H表示当前断点触发的次数。

Shell Command 执行Shell命令

会在断点触发的时候执行Shell命令。

Sound 触发声音

滴滴滴之类的。。。

Options

是否进入DEBUG界面。
勾选这个断点触发后不进入DEBUG界面,断点打印日志或者声音断点一般都勾选。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 30,090评论 8 265
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,914评论 1 32
  • iOS开发来说,断点调试时必不可少的,以前一直在用“Exceptions breakpoint(全局或异常断点)”...
    sayHellooX阅读 11,827评论 2 5
  • 剑未配好,出门已是江湖。 最近一直没有更新简书是因为在开发和测试阶段,有任务,没有进行学习,不过在做任务的时...
    和珏猫阅读 12,627评论 9 75
  • 感赏老妈今天带我去足浴城放松了一天,老人家辛苦了大半辈子,晚年过得有滋有味,我们真的很高兴。记忆里从来没有...
    王琛_Amy阅读 1,256评论 1 1

友情链接更多精彩内容