bugly的原理

1.检测卡顿的原理

Runloop的两次source[kCFRunLoopBeforeSources 和 kCFRunLoopAfterWaiting]的监控  创建信号量的方式 
渲染界面的频率来监控帧率

2.检测崩溃的原理

iOS一般的崩溃有两种
1.Single异常
我们需要注册异常端口  获取到single
    signal(SIGHUP, SignalExceptionHandler);
    signal(SIGINT, SignalExceptionHandler);
    signal(SIGQUIT, SignalExceptionHandler);
    
    signal(SIGABRT, SignalExceptionHandler);
    signal(SIGILL, SignalExceptionHandler);
    signal(SIGSEGV, SignalExceptionHandler);
    signal(SIGFPE, SignalExceptionHandler);
    signal(SIGBUS, SignalExceptionHandler);
    signal(SIGPIPE, SignalExceptionHandler);
获取函数堆栈信息,这里可以获取响应调用堆栈的符号信息,通过数组回传
    int i, frames = backtrace(callstack, 128);
    char** strs = backtrace_symbols(callstack, frames);

获取到的 backtrace 

void SignalExceptionHandler(int signal)
{
    NSMutableString *mstr = [[NSMutableString alloc] init];
    [mstr appendString:@"Stack:\n"];
    void* callstack[128];
    int i, frames = backtrace(callstack, 128);
    char** strs = backtrace_symbols(callstack, frames);
    for (i = 0; i 

3.符号化

就是我们要获取到其他的堆栈信息的时候  我们就需要符号化数据了

通过 dSYM 文件提取地址和符号的对应关系,进行符号还原

移动端监控体系之技术原理剖析

你可能感兴趣的:(bugly的原理)