- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我现在正在尝试优化应用程序的启动时间,目前想减少操作系统镜像加载器所花费的时间。
从 dyld(1) 中,我发现了两个环境变量:DYLD_PRINT_STATISTICS
和 DYLD_PRINT_INITIALIZERS
。
DYLD_PRINT_STATISTICS
使 dyld 打印有关 dyld 如何花费时间的统计信息。这是我在执行 purge
命令后启动应用程序时的输出。
total time: 5.9 seconds (100.0%)
total images loaded: 130 (101 from dyld shared cache, 0 needed no fixups)
total segments mapped: 105, into 12914 pages with 840 pages pre-fetched
total images loading time: 1.8 seconds (31.0%)
total dtrace DOF registration time: 0.09 milliseconds (0.0%)
total rebase fixups: 137,658
total rebase fixups time: 1.1 seconds (19.4%)
total binding fixups: 28,502
total binding symbol lookups: 1,127, average images searched per symbol: 0.1
total binding fixups time: 452.28 milliseconds (7.6%)
total weak binding fixups time: 188.52 milliseconds (3.1%)
total bindings lazily fixed up: 130 of 1,164
total initializer time: 2.3 seconds (38.7%)
total symbol trie searches: 2611
total symbol table binary searches: 118
total images defining/using weak symbols: 13/65
显然,调用初始化函数会占用大量时间。所以我尝试了 DYLD_PRINT_INITIALIZERS
来获取初始化函数列表。
我确实得到了它们,但是没有关于它们的时间信息,例如时间戳,只有大量的以下行:
dyld: calling initializer function 0x25170 in MY_APPLICATE_PATH
这对我来说找到要优化的目标初始值设定项毫无用处。
所以,我的问题是:
dyld
打印时间戳吗?dyld
调用初始化函数的时间吗? DTrace
或 Instruments
是否适用于此?虽然我现在在 OSX 上工作,但也欢迎任何适用于 Windows 的工具或有用信息。
谢谢
最佳答案
你能用this technique吗? ?
我见过一个大型应用程序启动缓慢,它加载了大量的 dll 并进行了大量的初始化。采样会告诉您发生了什么,您可以修复它,这可能会让您大吃一惊。
例如,我永远不会猜到的是设置国际化字符串所花费的时间,其中很多是不需要的。另一个例子:不仅创建和初始化数据结构,而且销毁和重新创建它们,这是不必要的,因为在菜单、 TreeView 等中插入内容。
关于c++ - 如何分析 dyld 加载图像时调用初始化函数的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3744710/
我正在尝试运行PowerLoom的Java版本,但是当我尝试在终端中启动它时,出现以下错误消息: dyld: Symbol not found: __cg_jpeg_resync_to_restart
我的项目已成功构建,但我不知道发生了什么?现在它显示了这个错误,我已经从 stackoverflow 和其他来源阅读了很多类似的问题,但没有任何帮助,这里是错误的快照。 我仅使用 SQLite.Swi
我已经将macos更新为Mojave,并且在更新了命令工具之后,当我运行我的C++程序时,出现以下错误 dyld:/Users/rameshkolluru/Dropbox/1D_Multiphase_
我正在尝试构建由 Apple 在此处发布的开源 DYLD: http://www.opensource.apple.com/source/dyld/dyld-97.1/ 我复制了每个文件并尝试构建 X
我更新了 XQuartz,现在它没有加载,提示: Dyld Error Message: Library not loaded: /opt/X11/lib/libfreetype.6.dylib
当我尝试在手机上安装项目时,出现错误:“dyld:未加载库:”,并且在文件“dyld`__abort_with_payload:”中出现了线程1。但是在模拟器上,一切都很好。 因此,我尝试通过测试逐步
当我尝试运行 UI 和单元测试时,出现异常: dyld: could not load inserted library '/private/var/containers/Bundle/Applica
当我尝试构建我的目标时,动态链接器出现此错误: dyld: Library not loaded: @rpath/iPhoneSimulatorRemoteClient.framework/Versi
我有一堆动态库,我需要在运行时从应用程序包中加载它们。我注意到,如果我将我的 dylib 放在 /usr/lib 文件夹中,那么应用程序就可以加载它。我已经阅读了 install_name_tool
当我从命令行运行 iPhone 应用程序时,向项目添加框架时遇到一些困难。我的最终目标是从自动构建过程运行应用程序测试。 当我从 xCode 运行我的应用程序时: 我向我的目标添加了“复制文件”构建阶
我已经使用xcode5.0在iOS 7和iOS6设备上部署了我的应用程序。当我在iOS6上运行时,我的应用程序崩溃了。当我收到崩溃日志时,出现以下错误: Dyld错误消息: dyld: Symbol
将Xcode升级到版本11.1(11A1027)后,我的iOS应用(MyApp)在开始运行时在Xcode中崩溃,并显示以下运行时错误: dyld:找不到符号:___chkstk_darwin 引用自:
我正在尝试使用合成语音使我的代码与 iOS 6 和 7 兼容。我希望它适用于 iOS 7 而不适用于 iOS 6。 问题是,当我在 iOS 6 的模拟器中运行时,它甚至在模拟器启动之前就出现以下错误:
当我尝试将应用程序构建到真正的iOS设备上时,就会发生这种情况。我正在使用Cocoa Touch Framework(在iOS 8 SDK中引入)。在iOS模拟器上可以正常工作。 最佳答案 您的设备也
我一直收到有关我的应用程序在 iOS 6 中加载时崩溃的报告。它是使用 iOS 8 SDK 构建的,在 iOS 7 和 8 上运行良好。我刚刚设法拿到一台 iOS 6 设备进行测试,它确实在启动时崩溃
尝试在 xcode 10 中使用 cocoapods 构建一个 cordova 项目,在 Debug模式下一切正常,但当发布到 Testflight 时,它会立即崩溃并显示错误消息。 Exceptio
我有一个仅在调试配置中使用 SimulatorStatusMagic 的项目。所以我的 Podfile 有以下行: pod 'SimulatorStatusMagic', :configuration
苹果操作系统 10.13.4 我在 shell 中写了命令 'dyldinfo',但是出错了-bash:dyldinfo:找不到命令 希望你能帮助我 最佳答案 在最新版本的 macOS 上,您可以使用
我有一个专门的共享库,它在可执行文件的执行期间动态加载。该库提供函数 b()。此函数依次调用函数 a()。 a 函数是在可执行文件中定义的,而不是库本身,因此我希望能够从库中调用一些可执行文件的代码。
我正在尝试在 OS X (10.7.5) 下对共享库进行版本控制,但我无法让 dyld 识别最大兼容版本(最低版本也可以)。考虑下面的测试代码和以下场景: 二进制链接到 1.0 版本的库,兼容版本 1
我是一名优秀的程序员,十分优秀!