iOS日常须知

iOS 使用符号断点定位警告约束警告-[LayoutConstr

2018-05-31  本文已影响0人  Pandakingli


约束的警告

在使用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界面,断点打印日志或者声音断点一般都勾选。

上一篇下一篇

猜你喜欢

热点阅读