Xcode - 调试相关

模拟器的调试配置:

在启用Color Blended Layers的状态下编译并运行应用程序。由于表视图单元格现在使用了不透明层,所以会用绿色覆盖,以指示它们是不透明的。

除了标记图层外,还有其他一些有用的功能可帮开发者在iOS模拟器中调试应用。以下是其中一些比较有用的:

Toggle Slow Animations in Frontmost App: 选中模拟器,打开Debug菜单选中Toggle Slow Animations in Frontmost App,该功能可以降低app中动画的运行速度,适合调试包含复杂动画的应用程序。也可是使用快捷键Command-T来操作。
Color Copied Images:该选项可以给绘制时被Core Animation复制的图片添加蓝绿色叠加层。
Color Misaligned Images:如果图片边界没有与目标像素完美对齐,该功能可为图片叠加上一层品红色。如果图片使用确定的比例大小绘制,那么该功能会为图片添加一层黄色叠加。
Color Off Screen Rendered:.该选项为离屏渲染内容添加一个黄色的叠加层。
很多开发者会忽略接入电话时应用状态栏的设计问题,你可以通过触发通话中状态栏来简单测试。在iOS模拟器中,从Hardware菜单中选中Toggle In-Call Status Bar。

想查看app如何响应事件,可按下Command-T来启用slow animations,并按下Command-Y来展示电话接入时的状态栏。倘若你的应用程序使用了导航栏,那么操作系统会为你兼顾到这一块儿。

NSLog的补充版本:

//A better version of NSLog
#define NSLog(format, ...) do { \
fprintf(stderr, "<%s : %d> %s\n", \
[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], \
__LINE__, __func__); \
(NSLog)((format), ##__VA_ARGS__); \
fprintf(stderr, "-------\n"); \
} while (0)

源链接:https://viktyz.gitbooks.io/iosnotebook-gitbook/Notes/Note_00055_20151222.html

方案名称

Xcode - 调试相关

关键字

Xcode \ Debug \ Crash

需求场景

  1. 调试常见问题收集

参考链接

  1. Debugging iOS AutoLayout Issues
  2. 博客园 - iOS 各种调试技巧豪华套餐

详细内容

1. unrecognized selector sent to instance 问题快速定位的方法

方法一:在 Debug 菜单中选择 Breakpoints -> Create Symbolic Breakpoint ,在 Symbol 中填写如下方法签名:-[NSObject(NSObject) doesNotRecognizeSelector:] ,然后再运行,错误时断点会停在真正导致崩溃的地方。

方法二:添加 Exception 类断点(推荐方案)

打开Xcode
打开断点导航栏 cmd+7
点击左下角 **+** 号按钮
选择 Add Exception Breakpoint...

2. Swift Delegate Error show "use of undeclared type in swift project"

在 Swift 中,Delegate 名称不能和函数命相同

3. Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
打开Xcode
打开断点导航栏 cmd+7
点击左下角 **+** 号按钮
选择 Add Symbolic Breakpoint...
右键 Edit Breakpoint...
在 Symbol 中输入 UIViewAlertForUnsatisfiableConstraints

通过 打印内存地址信息可以查看控件信息

(lldb) po 0x7fc82aba1210

通过 recursiveDescription 方法可以查看全部页面层级关系

(lldb) po [[0x7fc82aba1210 superview] recursiveDescription]
4. Break on void XXXxxx() to debug.

类似以下错误提示

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.

添加断点方法

方法一:终端方式

点击暂停应用程序 在终端输入

(lldb) b _NSLayoutConstraintNumberExceedsLimit
Breakpoint 1: where = Foundation`_NSLayoutConstraintNumberExceedsLimit, address = 0x055e26cb

点击继续运行,再次进入会停在 crash 位置

方法二:添加 Xcode 断点

打开Xcode
打开断点导航栏 cmd+7
点击左下角 **+** 号按钮
选择 Add Symbolic Breakpoint...
右键 Edit Breakpoint...
在 Symbol 中输入 _NSLayoutConstraintNumberExceedsLimit
在 Module 中输入 Foundation

点击继续运行,再次进入会停在 crash 位置

5. viewDidLayoutSubviews 在 iOS 7 上导致应用崩溃

在 iOS 8 中使用 viewDidLayoutSubviews ,应用正常运行,没有问题,但是应用在 iOS 7 上运行的时候,报错,导致应用崩溃,错误信息类似:

Cannot find executable for CFBundle 0x78f8f220 </Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 7.1.simruntime/Contents/Resources/RuntimeRoot/System/Library/AccessibilityBundles/GeoServices.axbundle

Assertion failure in -[UIView layoutSublayersOfLayerl]....unrecognizeSelector.....

在 viewDidLayoutSubviews 方法末尾添加 [self.view layoutsubviews] 即可解决

效果图

(无)

备注


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值