zoukankan      html  css  js  c++  java
  • 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(免费)

  • 相关阅读:
    java 集合框架(十五)Deque
    java 集合框架(十四)Queue
    java 集合框架(十)List
    java 集合框架(四)Set
    java 集合框架(三)Collection
    java 集合框架(一)概述
    java 集合框架(二)Iterable接口
    java I/O框架 (四)文件流
    全零网络IP地址0.0.0.0表示意义详谈
    windows在cmd执行svn 命令
  • 原文地址:https://www.cnblogs.com/oumygade/p/4528876.html
Copyright © 2011-2022 走看看