模拟器的调试配置:
在启用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. 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] 即可解决
效果图
(无)