需要调试 Cocoa 绑定的技巧
Posted
技术标签:
【中文标题】需要调试 Cocoa 绑定的技巧【英文标题】:Need tips for debugging Cocoa bindings 【发布时间】:2012-08-18 15:40:07 【问题描述】:我在三天内遇到了第二个问题,错误的绑定导致我数小时的搜索和头痛。
查看堆栈跟踪表明调试存在问题(例如,在运行时开始生成异常之前调用的最后一个方法之一是 bind:toObject:withKeyPath:options:)。但是,我发现无法确定是哪个绑定导致了问题:
堆栈跟踪或变量检查中没有任何内容表明崩溃的调用涉及哪些视图。
可通过单步执行代码来跟踪的最后一条非机器指令是对单一函数(awakeFromNib 或 makeKeyAndOrderFront)的调用。
实际异常中的消息令人费解 - 例如,“无法从类 NSScrollView 的对象创建 NSArray”,同时创建一个没有任何 NSScrollViews 的窗口(只有两个按钮和两个文本字段)。
那么...调试这些类型的问题有什么技巧吗?例如:
有什么方法可以获取 nib/xib 中指定的所有绑定的列表? (无法做到这一点让我抓狂!)
有什么方法可以查出崩溃中涉及哪些视图或控件?
有没有什么方法可以获取更多关于单体调用(如 awakeFromNib)中发生的事情的信息?
【问题讨论】:
你试过打破所有抛出的异常吗? 是的,但这似乎并没有改变调试输出。我认为 Xcode 在抛出异常时会中断 - 只是抛出它的代码在 NIB 加载/绑定机制中有九层 - 而且很多深层 API 代码是编译后的机器语言代码在无描述的内存引用上运行。 好的。我已经扩展了下面的答案。希望它有一些用处。 【参考方案1】:您可以将 xib 文件作为源代码(不在 IB 中)打开并搜索 "IBBindingConnection"
部分。
示例:Justin 的搜索方式(参见 cmets):
grep -A 18 -B 1 -H -a -n "IBBindingConnection" /PATH/TO/NIB
【讨论】:
不是我所希望的,但是一个有用的工具。谢谢。 @DavidSteingrep -A 18 -B 1 -H -a -n "IBBindingConnection" /PATH/TO/NIB
或者您可以使用 grep 搜索目录。
这样好一些。可能是我希望找到或收到的关于此问题的最佳提示。谢谢,贾斯汀。以上是关于需要调试 Cocoa 绑定的技巧的主要内容,如果未能解决你的问题,请参考以下文章
Cocoa:如何将布尔属性绑定到 NSCellStateValue?
ArrayController 找不到 AppDelegate(Cocoa 中的绑定)