macOS Time Profiler分析c ++代码但找不到我的函数名

时间:2017-12-30 15:45:58

标签: c++ macos profiling instruments

我写了一个简单的测试c ++代码,这是我第一次尝试在我的mac中使用Time Profiler:

#include <iostream>     // std::cout

int frank() { return 0; }

int main () {
  int a = frank();
  std::cout << a << std::endl;
  return 0;
}

然后我编译了它:

g++ test.cpp -o test0

我使用时间配置文件来分析我的可执行文件test0

enter image description here

我以为我可以在frank()中找到我的功能Call Tree,但我没有。

另一个问题是如何将参数传递给Time Profiler中的可执行文件。

1 个答案:

答案 0 :(得分:1)

仪器是一种采样分析器,其采样频率太低,无法检测到您对frank()的调用。要么在函数内执行一些计算成本昂贵的计算,要么只是调用它足够多次。

将代码调整为以下(C ++ 11),其中在循环中调用稍微复杂的函数:

#include <iostream>     // std::cout

long frank(const unsigned int n) { return n*n; }

int main () {
    const auto nr_iterations = 1000000u;
    long a;
    for (auto n = 0u; n < nr_iterations; ++n)
    {
        a = frank(n);
    }
    std::cout << a << std::endl;
    return 0;
}

在我的机器上的仪器中得到以下结果:

enter image description here

要通过Instruments传递参数,请单击记录按钮旁边的目标名称。在显示的上下文菜单中,点击&#39;编辑目标'其中'target'是您的可执行文件的名称。例如:

enter image description here

出现一个对话窗口,您可以在其中输入参数。