zoukankan      html  css  js  c++  java
  • (二期)IOS调试技巧

     
    一、断点
     
    基本操作:添加 、移除、监视(Watch)某个变量。
    普通断点
    Edit Breakpoint
    1、Condition
    这里可以输入条件表达式,满足条件的时候断点就会生效。
    2、Ingore
    在这里可以设置忽略断点次数。
    3、Action
    Action有6中类型
    常用的就是Log MessageDebugger Command
    • Log Message:%B会打印断点的名字,%H会打印断点的调用次数,@@中间可以输入表达式
    • Debugger Command:po(打印对象信息),bt(打印函数栈),expression(表达式)。
    • 勾选Automatically continue after evaluating actions之后程序会在断点产生后继续运行。可以输入调试信息至于不暂停程序。(?)
    全局断点(Exception Breakpoint)
         定位 main 里边的 EXEC_BAD_ACCESS:问题。
    OpenGL ES的断点调试(OpenGL ES Error Breakpoint)
    符号断点(Symbolic Breakpoint)
    当程序运行到特定符号的时候就会产生断点。通过这种方式添加断点,就不需要在源文件中添加,也不需要知道断点设置在文件的第几行。
    比普通断点多了两个属性Symbol和Module。
    1. 方法名称:会对所有具有此方法名称的类方法生效。例如 initWithFrame: 。
    2. 特定类的方法:OC类和C++类都适用,例如 ,[UIView initWithFrame:]或者 Shap::draw()。
    3. 函数名称。例如普通C函数。
    Test Failure Breakpoint
    二、打印
     
    #define NSLog(format, ...) do { 
    fprintf(stderr, "<%s : %d> %s
    ", 
    [[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], 
    __LINE__, __func__); 
    (NSLog)((format), ##__VA_ARGS__); 
    fprintf(stderr, "-------
    "); 
    } while (0)
     
    三、Console(lldb)控制台命令
    常用调试命令
    help --帮助
    print --打印
    expression —改变程序内的值
    po
    // p 和 e 来代替 print 和 expression
     
    LLDB 无法确定涉及的类型 (译者注:返回的类型)
    //  p (char)[[$array objectAtIndex:$a] characterAtIndex:0]
    // p/d (char)[[$array objectAtIndex:$a] characterAtIndex:0]
     
     
  • 相关阅读:
    使用AWS、Docker与Rancher提供弹性的生产级服务
    如何用微服务重构应用程序
    Prometheus入门
    Docker监控:最佳实践以及cAdvisor和Prometheus监控工具的对比
    前后端分离session不一致问题
    Eclipse整合SSM框架+AOP+全局异常处理
    SSM配置基于注解AOP
    有关Linux
    Tomcat下配置javaWeb访问路径-Linux
    Linux下如何安装Nginx
  • 原文地址:https://www.cnblogs.com/hanyutong/p/4908545.html
Copyright © 2011-2022 走看看