Xcode - 是否可以在界面生成器的实时渲染过程(IBDesignable)中调试崩溃?



问题

是否可以设置断点并调试Xcode/InterfaceBuilder的实时渲染执行的代码?也就是说,我正在使用IBDesignable和IBInspectable属性来影响视图,因为它在界面构建器情节提要中呈现,并且希望能够调试"IB崩溃"错误。除了关于prepareForInterfaceBuilder的部分外,我在WWDC会话中记不起这一点。

上下文

我最近开始看到一些错误,报告IB在试图呈现我的代码时崩溃。我最终追踪到了layoutSubviews中一行原本无辜的代码,其中一个视图是从故事板链接而来的。IB在渲染实时视图时遇到的具体问题,在设置视图的所有子视图属性之前称为layoutSubviews(这本身似乎是一个单独的问题)。这与模拟器和设备形成了对比,在模拟器和设备中,视图是在第一次调用layoutSubviews之前设置的。长话短说,它涉及到在一堆文件中寻找冒犯性的更改。可以说,如果可以设置断点并捕获崩溃,我本可以很快找到问题。

有没有人知道如何调试和/或通常捕获这些问题,或者这种访问还不可用?

我又看了一次WWDC视频(§411@22:00左右)。你必须

  • 在IB中编辑视图,并将其自定义类设置为代码库中的类
  • 根据需要在自定义类中设置断点
  • 在IB中选择视图,然后选择编辑器->"调试所选视图"(底部)

奇怪的是,在我今天的测试中,它是通过(initWith)Frame而不是(initWith)Coder来创建我的视图的。这会导致后续约束配置逻辑失败,因为子视图尚未设置(就像调用了"withCoder"一样)。

(工具注释:Xcode 8.2,macOS Sierra)

我的失败与你的完全不同:我的代码崩溃,导致Xcode:中出现IB错误

错误:IB可设计项:无法更新自动布局状态:代理程序导致崩溃

要在macOS Sierra上调试此功能,请打开Console.app,然后在右侧边栏中打开"用户报告"。查找"IBDesignablesCooaTouch*"崩溃,然后选择适用的崩溃。这给了我诊断它所需的代码级别信息。

Crashed Thread:        0
Exception Type:        EXC_BAD_INSTRUCTION (SIGILL)
Exception Codes:       0x0000000000000001, 0x0000000000000000
Exception Note:        EXC_CORPSE_NOTIFY
Termination Signal:    Illegal instruction: 4
Termination Reason:    Namespace SIGNAL, Code 0x4
Terminating Process:   exc handler [0]
Application Specific Information:
CoreSimulator 375.21 - Device: IBSimDeviceTypeiPad2x - Runtime: iOS 10.3 (14E8301) - DeviceType: IBSimDeviceTypeiPad2x
Thread 0 Crashed:
0   libswiftUIKit.dylib             0x000000021a2ddead _TToFE5UIKitCSo7UIImagecfT24imageLiteralResourceNameSS_S0_ + 205
1   libswiftUIKit.dylib             0x000000021a2ddcef _TFE5UIKitCSo7UIImageCfT24imageLiteralResourceNameSS_S0_ + 79
2   com.company.App         0x0000000216df74ad _TZFC10App21ControlsP33_F7118662B6663018C7DD0DEBB6FDD87511buttonImagefT8forStateOS_25State_CSo7UIImage + 109 (Controls.swift:121)
…

(在我的情况下,Interface Builder无法加载图像文字。我必须实现此解决方法:xcode 6 IB_DESIGNABLE-不从Interface Builder中的捆绑包加载资源)

最新更新