对XCode Instruments分析结果中调用栈与重复项的疑问
Instruments性能分析疑问解答
疑问1:lq_cohomology下出现非直接调用的HeapMatrix::pivot
Instruments的调用树(Call Tree)视图默认会展示整个调用链中的所有函数,不管是直接调用还是经过多层嵌套的间接调用。只要HeapMatrix::pivot是在lq_cohomology发起的调用流程里被执行的,就会被嵌套在lq_cohomology的层级下。
如果只想查看lq_cohomology的直接子调用,可以在调用树的设置里勾选「Show Only Direct Children」选项,这样就只会显示它直接调用的函数,间接调用的不会出现在它的展开层级里。
疑问2:HeapMatrix::pivot多次出现
这是因为Instruments会按不同的调用上下文来分组统计,常见场景有两种:
- 若
lq_cohomology通过多条不同路径触发HeapMatrix::pivot(比如调用函数A,A调用pivot;同时调用函数B,B也调用pivot),这两个不同路径下的pivot会被分别列出,因为它们的调用栈上下文不一样。 - 要是
HeapMatrix::pivot在同一路径下被多次调用,而Instruments的采样捕捉到了不同的执行实例,也可能会分开显示(不过这种情况通常会合并成一条,同时展示总耗时和调用次数)。
如果想把所有HeapMatrix::pivot的调用汇总成一条,可以切换到「Flat Profile」视图,这里会将同名函数的所有调用耗时合并统计,不区分调用路径。
内容的提问来源于stack exchange,提问作者Bubaya
相关产品推荐
相关产品推荐

