性能优化实战一

263 阅读3分钟

断点调试

Ignore是忽略指定次数的短点

添加Action

%B输出断点的名字 %H输出断点的触发次数 @’expression‘@

按照action的类型可以添加不同的断点提示内容

添加全局类型断点

  • swift Error Breakpoint是swift发生throw的时候暂停
  • Exception Breakpoint 捕获程序中的异常(数组越界,设置非空参数位nil)
  • Symbolic Breakpoint 符号断点 ,使用时不需要找到具体代码处,设置只要执行某个函数就触发断点就可(可以是OC的具体某个方法)
  • OpenGL ES Error Breakpoint 发生OpenGL ES错误的时候,暂停在错误处
  • Constraint Error Breakpoint 约束错误断点,自动布局控件发生错误
  • Test Failure Breakpoint 测试没有通过的时候,暂停在失败的测试处

静态分析工具

静态分析:不进行编译对代码的逻辑、有效性、内存泄漏风险和调用是否异常进行分析

LLDB

查看、修改变量,执行指令

使用expression,动态执行代码,可在运行时修改内存中变量的值,改变内存的轨迹。

expression 变量名 expression 变量 = 赋值 expression只能操作当前数据帧中的变量,如果要操作别的数据帧的内容,需要切换数据帧(frame select num)

frame查看代码帧

LLDB可以通过前面的数字标号来切换要查看的数据帧信息。 查看当前数据帧的信息frame info 查看数据帧的变量信息frame variable 切换数据帧 frame select 数字标号

使用thread执行操作线程

查看当前线程上所有的数据帧 thread backtrace,然后用frame进行查看 查看当前所有被激活的线程 thread list,*标记了当前所在的线程 类似frame,也可以使用info和select进行线程信息的查看和切换线程。

其他的指令

help 指令名

日志和埋点

日志:系统或程序在运行中会记录各种数据,开发者通过这些数据来进行问题的查找,解决,性能分析。 埋点:分析用户的行为,作为出现问题时的场景复现记录。

有时候一些想不到的Crash发生在用户使用过程中,这时候可以通过向系统注册异常处理函数来捕获这些异常,注册捕获函数:

void UncaughtExceptionHandler(NSException *exception){
//    将Crash的调用栈数据写入本地文件,并打印文件的地址
    [exception.callStackSymbols writeToFile:[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).firstObject stringByAppendingString:@"/log.log"] atomically:NO];
    NSLog(@"%@",[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).firstObject stringByAppendingString:@"/log.log"]);
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    
    NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);
    
    return YES;
}

使用腾讯Bugly异常捕获工具

bugly.qq.com/v2/ 申请相关的服务,记录APPID和APPKey,使用Pod工具 安装Bugly,在AppDelegate中进行导入,并进行初始化Bugley startWithAppID:@"APP ID",当应用程序崩溃的时候会自动上传到bugly系统,可以登陆进行查看。

埋点

  • 页面埋点:某个页面出现的次数,某个页面用户停留的时间
  • 行为埋点:用户行为的记录,某个按钮点击的次数,视频或者音频的播放次数
  • 系统埋点:观测系统的状态,帮助进行分析异常:内存不足,耗电警告,桢率过低等

实质是当应用程序触发某一条件的时候,应用程序向服务器端发送一条埋点信息。

使用Fabric分析工具

移动端分析工具,出了提供基础的异常上报,运营数据,还提供开发者自定义事件,方便进行埋点。