之前分享过配置环境变量 DYLD_PRINT_STATISTICS,来在控制台打印出程序启动过程中各个阶段所消耗的时间。今天再分享两个环境变量:DYLD_PRINT_LIBRARIESDYLD_PRINT_LIBRARIES_POST_LAUNCH,这两个变量用于打印 dyld 加载的库,如下代码所示:

dyld: loaded: /var/containers/Bundle/Application/717397DD-AE3E-457F-A446-609883FF865C/ChangeIcon.app/ChangeIcon
dyld: loaded: /Developer/usr/lib/libBacktraceRecording.dylib
dyld: loaded: /Developer/usr/lib/libMainThreadChecker.dylib
dyld: loaded: /Developer/Library/PrivateFrameworks/DTDDISupport.framework/libViewDebuggerSupport.dylib
dyld: loaded: /System/Library/Frameworks/Foundation.framework/Foundation
dyld: loaded: /usr/lib/libobjc.A.dylib
dyld: loaded: /usr/lib/libSystem.B.dylib
dyld: loaded: /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation
dyld: loaded: /System/Library/Frameworks/UIKit.framework/UIKit
dyld: loaded: /usr/lib/libarchive.2.dylib
dyld: loaded: /usr/lib/libicucore.A.dylib
dyld: loaded: /usr/lib/libxml2.2.dylib
dyld: loaded: /usr/lib/libz.1.dylib
dyld: loaded: /System/Library/Frameworks/CFNetwork.framework/CFNetwork
dyld: loaded: /System/Library/Frameworks/SystemConfiguration.framework/SystemConfiguration
......

两者的区别在于 DYLD_PRINT_LIBRARIES 会打印出所有被加载的库,而 DYLD_PRINT_LIBRARIES_POST_LAUNCH 打印的是通过 dlopen 调用返回的库,包括动态库的依赖库,主要发生在 main 函数运行之后。

参考:Logging Dynamic Loader Events