debug环境下打印启动耗时环境变量设置

EditSchema -> Run -> Arguments -> Environment Variables添加
DYLD_PRINT_STATISTICSDYLD_PRINT_STATISTICS_DETAILS值均为1

其中DYLD_PRINT_STATISTICS打印信息如下:

Total pre-main time: 203.41 milliseconds (100.0%)dylib loading time: 164.62 milliseconds (80.9%)rebase/binding time: 126687488.9 seconds (48910103.9%)ObjC setup time:  12.02 milliseconds (5.9%)initializer time:  56.09 milliseconds (27.5%)slowest intializers :libSystem.B.dylib :   2.42 milliseconds (1.1%)libBacktraceRecording.dylib :   4.68 milliseconds (2.3%)libMainThreadChecker.dylib :  33.34 milliseconds (16.3%)ShadowDemo :  11.59 milliseconds (5.7%)

DYLD_PRINT_STATISTICS_DETAILS输出如下:

  total time: 8.1 seconds (100.0%)total images loaded:  358 (351 from dyld shared cache)total segments mapped: 21, into 383 pagestotal images loading time: 7.8 seconds (95.4%)total load time in ObjC:  12.02 milliseconds (0.1%)total debugger pause time: 7.6 seconds (93.4%)total dtrace DOF registration time:   0.00 milliseconds (0.0%)total rebase fixups:  45,504total rebase fixups time:   6.99 milliseconds (0.0%)total binding fixups: 533,200total binding fixups time: 296.49 milliseconds (3.6%)total weak binding fixups time:   0.93 milliseconds (0.0%)total redo shared cached bindings time: 333.74 milliseconds (4.0%)total bindings lazily fixed up: 0 of 0total time in initializers and ObjC +load:  56.09 milliseconds (0.6%)libSystem.B.dylib :   2.42 milliseconds (0.0%)libMainThreadChecker.dylib :  33.34 milliseconds (0.4%)ShadowDemo :  11.59 milliseconds (0.1%)
total symbol trie searches:    1243688
total symbol table binary searches:    0
total images defining weak symbols:  37
total images using weak symbols:  92

开发阶段只具备参考意义,并不能准确反映线上的情况。


获取进程创建的时间

#import <sys/sysctl.h>
#import <mach/mach.h>static CFAbsoluteTime __startProcessTime = 0.f; // 进程创建时间
void processStartTime() {static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{struct kinfo_proc kProcInfo;int cmd[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, [[NSProcessInfo processInfo] processIdentifier]};size_t size = sizeof(kProcInfo);__startProcessTime = 0.f;if (sysctl(cmd, sizeof(cmd)/sizeof(*cmd), &kProcInfo, &size, NULL, 0) == 0) {NSUInteger startTime = kProcInfo.kp_proc.p_un.__p_starttime.tv_sec * 1000.0 + kProcInfo.kp_proc.p_un.__p_starttime.tv_usec / 1000.0;/// 处理成相对于2001/01/01 00:00:00的绝对时间戳,以便与CFAbsoluteTimeGetCurrent()时间戳相对应NSCalendar * calendar = [NSCalendar currentCalendar];calendar.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];NSDate *date = [calendar dateWithEra:1 year:2001 month:1 day:1 hour:0 minute:0 second:0 nanosecond:0];NSTimeInterval interval = [date timeIntervalSince1970];__startProcessTime = startTime - interval * 1000;}});
}

其他方案,诸如将某个+load的调用时间作为启动的时间点,或者注入一个动态库,在动态库中某个时机记录一个时间作为起始时间都不够精确。

iOS 准确获取app进程启动时间点相关推荐

  1. iOS 获取app进程被杀死事件applicationWillTerminate

    我的需求是,app推入后台,不做用户信息清除,但是程序被用户双击上滑杀死后,就对app用户信息做一个清除,让用户再次打开app时重新登录,so,就要获取app被杀死的事件了,appDelegate里面 ...

  2. iOS 准确获取 iPhone 状态栏、导航栏、TabBar高度,看这篇就够了

    前言 最近在项目开发的时候,发现项目提供的获取 「状态栏+导航栏高度」的方法,在 iPhone 12 系列机型上是错误的.解决了这个问题之后,决定做个简单的总结,于是有了这篇文章. 本文主要是分析了遇 ...

  3. iOS 如何获取app分享的文档类数据

    通过UIDocumentInteractionController或者是QLPreviewController来预览PDF等格式文件的时候,我们可以通过自带的UIActivityViewControl ...

  4. 【iOS】获取App Store上的.ipa包

    在仿写一些程序时,避免不了获取它的图片素材等等,那么最快也是最有效的方式就是获取原程序的ipa包.更或者,你想要逆向分析某一款APP时,那么只有获取了ipa后才能进行class-dump,ida等等后 ...

  5. iOS逆向工程——获取app素材图片

    原文链接:http://blog.csdn.net/felicity294250051/article/details/52134375 一.拿到资源包. 在iTunes里找到喜欢的应用,然后下载,直 ...

  6. IOS 如何获取app更新链接 如【itms-apps://itunes.apple.com/cn/app/id1362432761?mt=8】

    这是 iTunes 接口地址 ,有兴趣可以看一下,我们要用到的接口如下,xxx 处换成自己 App 的 AppId ,AppId 可以在 iTunes Connect 里面看到. http://itu ...

  7. iOS基础 获取状态栏的高度

    由于各代iPhone对屏幕尺寸以及前置摄像头.传感器等的迭代,对于其状态栏的高度也发生了一些微小的变化,不再是如以前的20高度了. 因此在iOS13后,对于状态栏的高度,有这么一个方法可以获取. if ...

  8. adb-获取包名/界面名、获取app启动时间、卸载app、退出app、查看所有进程

    获取包名/界面名 Mac/Linux: adb shell dumpsys window windows | grep mFocusedApp adb shell dumpsys window win ...

  9. iOS逆向开发(2):获取APP的类声明 | class-dump | dumpdecrypted

    iOS逆向开发(2):获取APP的类声明 | class-dump | dumpdecrypted 之前介绍了怎么操作越狱的iOS设备(以下简称为手机),但简单操作手机并不是目标,小程的目标是手机上特 ...

最新文章

  1. 智源论坛 | 智能处理器探索(3月21日)
  2. 错误笔记(1)——关于克隆虚拟机引发的后续问题
  3. Linux 定制X86平台操作系统
  4. asp 取数据 计算_地学数据 | 地理空间数据获取方式汇总
  5. MySQL存储引擎的选择
  6. Oracle-查看oracle是否有表被锁
  7. 参会邀请 - ISWC2020 | 第十九届国际语义网会议
  8. mysql哪些字段适合索引_(转)Mysql哪些字段适合建立索引
  9. android studio android 测试
  10. mysql int 转 varchar_Java后端程序员必备:MySQL索引失效的十大杂症
  11. mysql 批量数据循环插入
  12. Codeforces Round #584 (Div. 1 + Div. 2)
  13. 年会弹幕文字_公司办年会有哪些比较创意的形式?
  14. linux重装系统步骤 包含raid【主要针对服务器重装】
  15. 云计算 三种模式 各种云的区别
  16. POJ 1359 Spacecraft Malfunction G++
  17. 我想学习编程, 但不知道从哪里开始
  18. word文档中把几个图形组合在一起
  19. 浙江大学的计算机考研难度,浙江大学部分专业考研难度分析
  20. 从一到无穷大 #5 公有云时序数据库定价

热门文章

  1. OLED demura技术学习part2
  2. 【Shader Graph】Shader Graph入门
  3. 利用 pyqt5 实现给 深度学习图像识别算法 SSD300 搭建界面
  4. 上拉电阻与下拉电阻的学习
  5. Android自动化测试第三季-金阳光-专题视频课程
  6. vue安装less环境
  7. 巴菲特格言:别人越恐惧,你要越贪婪,别人越贪婪,你要越恐惧。
  8. YOLOV5目标检测记录
  9. js计算个人所得税怎么算
  10. python tabula获取pdf的列表数据