ios - 如何在 Instruments Time Profiler 中显示调用函数的次数

标签 ios xcode macos profiling instruments

我已经尝试了所有可能的字段,但找不到调用函数的次数。

enter image description here

此外,我没有得到 Self#Self。这两个数字是什么意思?

最佳答案

还有其他几种方法可以实现这一点。一个显然是创建一个静态命中计数器和一个发出并递增计数器的 NSLog。虽然这是侵入性的,但我找到了一种使用 lldb 执行此操作的方法。

  1. 设置断点
  2. 执行程序,直到您第一次遇到断点,并在您遇到的行的右侧记下断点号(例如“线程 1:断点 7.1”,注意 7.1)
  3. 上下文单击断点并选择“编辑断点”
  4. 将条件留空并选择“添加操作”
  5. 选择“调试器命令”
  6. 在命令框中,输入“breakpoint list 7.1”(使用步骤 2 中断点的断点编号)。如果您使用的是 gdb,我相信您可以使用“info break”。 enter image description here
  7. 勾选“评估后自动继续”选项 Breakpoint setup
  8. 继续

现在,llvm 不会停止,而是会发出有关断点的信息,包括已通过的次数。

至于 Glenn 和 Mike 之间关于上一个答案的讨论,我将描述一个性能问题,其中函数执行计数很有用:我的应用程序中有一个特定的操作,每次执行该操作时性能都会显着下降。 Instruments 时间分析器显示,每次执行操作时,特定功能花费的时间是之前的两倍,直到如果重复执行操作,应用程序很快就会挂起。通过计数,我能够确定每次执行时,该函数被调用的次数是上次执行时的两倍。然后很容易找到原因,原来是有人在每次事件执行时在 NotificationCenter 中重新注册通知。这具有使每次执行时响应处理程序调用次数加倍的效果,从而使函数每次的“成本”加倍。知道它翻倍是因为它被调用了两倍,而不是因为性能越来越差,这让我查看了调用序列,而不是因为函数本身可能会随着时间的推移而退化。

关于ios - 如何在 Instruments Time Profiler 中显示调用函数的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7787428/

相关文章:

ios - UILongPressGestureRecognizer 发送 Action 两次

android - 在底部导航 flutter 后面扩展容器

objective-c - iOS 中的图像弯曲变换

xcode - 如何防止 Storyboard 调整(拉伸(stretch))以 UIView 为中心的 UIImage 的大小?

xcode - Xcode SDK(例如watchOS和tvOS)可以卸载吗?

ios - 如何在 `Quick Help` 的 Swift 注释中添加新行

xcode - XCUITest - 如何在应用程序运行时禁用 Wi Fi?

ios - Swift - 如何搜索结构数组

macos - Mac : Getting path of current desktop picture from terminal

c++ - 程序完成后强制停止播放MP3文件