【问题标题】:os_signpost works on simulator but not when running on deviceos_signpost 在模拟器上工作,但在设备上运行时不工作
【发布时间】:2019-05-07 13:25:17
【问题描述】:

在我想要跟踪时间的函数之一中,我使用仪器有以下代码行。当我通过仪器在模拟器上运行应用程序时,使用 os_signpost 测量的时间确实会显示出来,我可以准确地测量我需要的时间。

然后我切换到设备,相同的代码。但是,由于它在设备仪器上运行,因此不会显示测量的时间。它只显示这个:

os_signpost 时间根本不显示。

所以,在模拟器上一切都很好,但当我切换到我的 iPhone 设备时就不行了。

有什么想法吗?

let spid = OSSignpostID(log: SignpostLog.myLog, object: myObj as AnyObject)

defer { os_signpost(.end, log: SignpostLog.myLog, name: "operation1", signpostID: spid) }

os_signpost(.begin, log: SignpostLog.myLog, name: "operation1", signpostID: spid)

【问题讨论】:

    标签: ios swift xcode instruments


    【解决方案1】:

    原来 os_signpost 不会显示,因为录制设置为立即。将其设置为 Deferred 以便我可以运行应用程序,然后停止录制,然后仪器会显示我在代码中的自定义 os_signpost。

    【讨论】:

    • @Shizam 请注意,一般来说,当您没有看到任何录音时,很有可能在 Instruments 窗口的标题下方有一个⚠️#number。点击后会显示“Data stream: 3 log/signpost messages lost due to high rate in live mode recording. Try windowed recording mode。”“高速率”是指每秒生成太多路标——超过设备可以处理的 atm。
    • @zumzum 将录制模式设置为“延迟”对我不起作用。在设备上进行分析时,我仍然看不到我的路标。
    【解决方案2】:

    确保您没有通过环境变量禁用OS_ACTIVITY_MODE(请参见下面的屏幕截图)

    我删除了它,一切正常 =)

    【讨论】:

    • 最好将其设置为“默认”而不是“禁用”,设置“启用”将显示每个日志,但禁用也会禁用每个日志(甚至是来自 pod 的有用日志),这样更好使用“默认”,因为它只会隐藏无用的日志
    • 哦,伙计。我花了几个小时才找到你的解决方案。谢谢!
    猜你喜欢
    • 2012-08-19
    • 2023-03-23
    • 2013-07-02
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    • 1970-01-01
    相关资源
    最近更新 更多