• iOS 调试技巧


    1. 什么是LLDB?

    LLDB,底层调试器,在xcode的Debug区域,能看到蓝色的小字 (lldb)

    2. 什么dsYM文件?

      dsYM是调试信息文件,因为后缀名.dsYM,所以叫sdYM文件,创建新工程时,默认就会创建dsYM文件,Build Setting里有相应的设置

    3. 什么是符号化?

      程序运行时,是将源代码转成机器码运行的,程序一旦崩溃,所能收集到的崩溃信息,无非是一些内存地址,十六进制码,必须转成方法名或变量名,才能看懂崩溃信息,这个转换的过程称为符号化,符号化依据dsYM文件,因为dsYM文件中,存储着内存地址和方法名之间的映射。

    4. 符号化的方法

    http://www.cocoachina.com/industry/20140514/8418.html

    5. 断点

     5.1 添加异常断点

     5.2 添加符号断点

      和添加异常断点同一按钮,选Symbolic Breakpoint,符号断点,通常用来关注你想关注的方法(感觉比较鸡肋)

     5.3 编辑断点

      开发创建的任何断点,都可以编辑,进入编辑界面,可以在condition中编辑条件。比如一个100次的循环,需要在执行第50次时,打上断点,可以在condition中写上index>50 (不一定是index,由for循环中条件变量决定),这个比较有用

     5.4 共享断点

      在xcode的左侧导航栏,切换至断点导航栏界面,按住crtl点击某一断点,可以选share,可以将断点上传到版本控制系统中,这个很鸡肋

    6. 观察点

      程序运行时,可以在debug区域的左部分,选中某个变量,按住ctrl,点击某一变量,再点击watch,一旦这个变量的值发送变化,会自动在控制台中打印old值和new值,并且观察点会自动被添加到断点导航中,这个比较有用,用来监控全局变量或单例的属性值

    7. 在LLDB中调试神器

      7.1 打印变量

      当用断点跟踪问题时,如果忘记NSLog了,可以用p或po打印,p打印非容器变量,po打印容器变量,例如字典、数组、集合的。

          7.2 打印视图层级结构

      recursiveDescription是没有自动补全的,敲回车就能看到打印效果,例如 [self.tableView   recursiveDescription]

          7.3 打印寄存器

      register read,程序一旦崩溃,可以看看打印寄存器,列出的方法,缩小排查范围。

          7.4 LLDB支持python脚本语言

    8. 启用僵尸对象检查

      ARC下,貌似没什么太大用处了。不过MRC下,这个用处挺大

    9. 崩溃类型

          9.1 EXC_BAD_ACCESS

      在访问一个已经释放的对象或向它发消息时,就会出现

          9.2 SIGSEGV

      段错误信号,是操作系统产生的一个更严重的错误。可能原因有 硬件出现错误,访问不可读的内存地址,或向受保护的内存地址写入数据。

          9.3 SIGBUS

      访问的内存是一个无效的内存地址

          9.4 SIGTRAP

      遇到这种错误时,通常LLDB会自动在相应行代码上暂停

          9.5 EXC_ARITHMETIC

      除0时,会出现

          9.6 SIGILL

      非法指令信号

          9.7 SIGABRT

      中止信号

          9.8 看门狗超时

      错误码0x8badf00d,常读作ate Bad Food(很像),常见于在同步队列中发请求,阻塞主线程

    10. 自定义C函数处理SIGABRT信号

      可以看看UncaughtExceptionhandler开源类

    11. 断言 

        建议在发布版本中删除断言,并用其他方式将断言记录在日志系统中。

          断言最好总是和if条件匹配

      int i = 4; 

      if (i == 4){

         // do something

      } else {

         NSAssert(NO,@"i 不等于4");

      }

    12. oc程序中,不建议使用@throw和@catch捕获异常,还是用断言吧(如果是发布版本,则记录在日志系统中)

    13. 收集崩溃报告,第三方崩溃报告服务,QuincyKit(收费),TestFlight(免费)

  • 相关阅读:
    PHP 日志专题
    ThinkPHP 3.2 用户注册邮箱验证帐号找回密码
    ThinkPHP 3.2 用户注册邮箱验证激活帐号
    ThinkPHP 3.2 vendor()方法的深入研究及Phpqrcode的正确扩展
    基于Composer的Laravel扩展包开发工作流
    如何利用showdoc自动生成API文档
    PHP中的几个随机数生成函数
    isset在php5.6-和php7.0+的一些差异
    PHP学习方向-进阶2(三)
    Jupyter Notebook 下安装 PHP 内核
  • 原文地址:https://www.cnblogs.com/oumygade/p/4528876.html
Copyright © 2020-2023  润新知