zoukankan      html  css  js  c++  java
  • iOS 调试大法

    本文转载至 http://www.jianshu.com/p/d19e19a91071

    0.笨办法

    看变量、对象?NSLog+重新编译运行;
    改某对象?改源码+重新编译运行;
    隔离某个方法?在方法中写 return 跳出+重新编译运行;

    慢!!!

    1.LLDB

    改源码+重新编译的方式要等待时间太长,并且看起来特别不高端。试试程序员最喜欢的命令行模式——LLDB。

    1.1 基本常用命令

    • help 查询帮助
    • printppo 打印对象

      高级一点:十六进制p/x 16,二进制p/t 16 完整格式清单

      po [[UIWindow keyWindow] recursiveDescription] 来检查层次结构,以文本形式打印出完整的视图层次结构
      po [[[UIWindow keyWindow] rootViewController] _printHierarchy] 来检查视图控制器

    • expressione 更改变量值

    • bt 打印栈帧信息,貌似用途不大?可以直接去看 xcode 的栈帧信息。
    • thread return 在函数开头thread return,可以隔离函数,伪造返回值,若非开头用这个语句,可能造成内存泄露。

    注意
    1)在 LLDB 中使用变量要加$符号
    p (char)[[$array objectAtIndex:$a] characterAtIndex:0]
    2)唯一的缺点就是不能创建新函数... 这意味着不能创建新的类,block,函数,有虚拟函数的 C++ 类等等。

    1.2 chisel 下载地址

    【常用命令】
    1)为了调试 view

    • border unborder: 画边界
    • mask unmask:给某个 view 加红色遮罩,便于查找
    • show hide : 显示、隐藏 viewlayer

    2)为了看结构

    • pclass:打印某对象的类的继承关系
    • pinternals: 打印某个对象的内部结构和数据

    • pca: 打印 layer tree

    • pvc pviews : 打印 vcview 的层级树
    • presponder: 打印从某个对象开始的响应链

    • ptv :打印最高层级的 tableview

    • pcells: 打印结构中最高层级的 tableview 的可见 cell

    3)查找

    • fv fvc:用正则查找 viewvc
    • vs :遍历查找某个 view

    4)刷新

    • caflush : 更新 UI

    【待挖掘的命令】

    • wivar:给对象设置观察点
    • bmessage:非重写方法的符号断点
    • fa11y
    • flicker : 通过闪动查找某个 view
    • panim :判断当前代码是否在 uiview 动画 block 中
    • pinvocation :打印当前调用的栈帧、接受者、参数(只支持 x86)
    • pivar
    • taplog:Log tapped view to the console.
    • visualize :Open a UIImage, CGImageRef, UIView, or CALayer in Preview.app on your Mac.

    chisel commands

    查看帮助 (lldb) help
    查看某语句帮助 (lldb) help border

    2.断点

    1)控制台中的 step intostep overstep out按钮
    2)xcode-symbolic breakpoint
    设置条件、函数和 action(断点行为,每次断点到此处时运行的命令)

    3)exception breakpoint

    3. 工具

    反编译:http://www.hopperapp.com/
    Runtime:Aspects:http://github.com/steipete/Aspects
    DTrace 框架:苹果新发布的活动追踪 API

    4. 总结

    步骤:
    复现问题-断点+lldb+method swizzling 缩小范围(探查手段,包括 Instruments)-分析如何发生-解决方案

    向苹果反馈 bug: http://www.quickradar.com/

    与调试器共舞 - LLDB 的华尔兹
    1.一篇很赞的ios视图bug调试案例,技术和方法都值得借鉴~http://www.cocoachina.com/ios/20150330/11435.html
    2.ios ui调试 http://www.cocoachina.com/ios/20141224/10748.html
    3.ios中的crash日志捕获原理及实现详解http://www.cnblogs.com/alario/archive/2012/03/28/2421574.html
    4.ios应用崩溃日志分析http://www.cocoachina.com/applenews/devnews/2013/0725/6677.html
    5.高级技巧:【iOS/Mac OS】程序崩在objc_msgSend(),怎么办?http://blog.csdn.net/horkychen/article/details/8015109

      1. pony debugger 待尝试http://blog.csdn.net/ysy441088327/article/details/8797095
        7.xcode断点相关高级设置(待实践!!!)http://www.cocoachina.com/applenews/devnews/2013/0701/6514.html
  • 相关阅读:
    关系数据理论之第三范式
    关系数据理论之第二范式
    关系数据理论之第一范式
    排序之外部排序
    排序之选择排序
    排序之希尔排序
    排序之基数排序
    排序之计数排序
    排序之堆排序
    排序之归并排序
  • 原文地址:https://www.cnblogs.com/Camier-myNiuer/p/5837119.html
Copyright © 2011-2022 走看看