C++ gprof探查器不打印时间摘要

C++ gprof探查器不打印时间摘要,c++,profiler,gprof,C++,Profiler,Gprof,我创建了一个简单的程序: #include <unistd.h> void ssleep(unsigned int s) { usleep(1000000*s); } int main(int, char**) { ssleep(1); } 我得到一个没有时间摘要的个人资料: % cumulative self self total time seconds seconds calls

我创建了一个简单的程序:

#include <unistd.h>

void ssleep(unsigned int s)
{
  usleep(1000000*s);
}

int main(int, char**)
{
  ssleep(1);
}
我得到一个没有时间摘要的个人资料:

  %   cumulative   self              self     total           
 time   seconds   seconds    calls  Ts/call  Ts/call  name    
  0.00      0.00     0.00        1     0.00     0.00  ssleep(unsigned int)
与任何其他代码的情况相同。我错过什么了吗

我的系统:

sch@sch-K52F:~/test$ uname -a
Linux sch-K52F 3.2.0-45-generic-pae #70-Ubuntu SMP Wed May 29 20:31:05 UTC 2013 i686 i686 i386 GNU/Linux
sch@sch-K52F:~/test$ gprof -v
GNU gprof (GNU Binutils for Ubuntu) 2.22
Based on BSD gprof, copyright 1983 Regents of the University of California.
This program is free software.  This program has absolutely no warranty.
多谢各位


编辑1)

其他例子:

 time   seconds   seconds    calls  Ts/call  Ts/call  name
  0.00      0.00     0.00     1482     0.00     0.00  std::_Iter_base<unsigned char*, false>::_S_base(unsigned char*)
  0.00      0.00     0.00     1482     0.00     0.00  std::_Niter_base<unsigned char*>::iterator_type std::__niter_base<unsigned char*>(unsigned char*)
  0.00      0.00     0.00     1247     0.00     0.00  std::_Vector_base<unsigned char, std::allocator<unsigned char> >::_M_get_Tp_allocator()
  0.00      0.00     0.00      988     0.00     0.00  __gnu_cxx::__normal_iterator<unsigned char*, std::vector<unsigned char, std::allocator<unsigned char> > >::base() const
  0.00      0.00     0.00      988     0.00     0.00  std::move_iterator<unsigned char*>::base() const
  0.00      0.00     0.00      988     0.00     0.00  std::vector<unsigned char, std::allocator<unsigned char> >::size() const
  0.00      0.00     0.00      988     0.00     0.00  std::_Iter_base<std::move_iterator<unsigned char*>, true>::_S_base(std::move_iterator<unsigned char*>)
  0.00      0.00     0.00      988     0.00     0.00  std::move_iterator<unsigned char*>::move_iterator(unsigned char*)
  0.00      0.00     0.00      988     0.00     0.00  std::_Miter_base<std::move_iterator<unsigned char*> >::iterator_type std::__miter_base<std::move_iterator<unsigned char*> >(std::move_iterator<unsigned char*>)
  0.00      0.00     0.00      988     0.00     0.00  std::move_iterator<unsigned char*> std::make_move_iterator<unsigned char*>(unsigned char* const&)
  0.00      0.00     0.00      741     0.00     0.00  __gnu_cxx::new_allocator<unsigned char>::max_size() const
  0.00      0.00     0.00      555     0.00     0.00  operator new(unsigned int, void*)
  0.00      0.00     0.00      541     0.00     0.00  void std::_Destroy_aux<true>::__destroy<unsigned char*>(unsigned char*, unsigned char*)
  0.00      0.00     0.00      541     0.00     0.00  std::_Vector_base<unsigned char, std::allocator<unsigned char> >::_M_deallocate(unsigned char*, unsigned int)
  0.00      0.00     0.00      541     0.00     0.00  void std::_Destroy<unsigned char*>(unsigned char*, unsigned char*)
时间秒秒秒呼叫Ts/呼叫Ts/呼叫名称
0.00 0.00 0.00 1482 0.00 0.00标准:_Iter_base:_S_base(无符号字符*)
0.00 0.00 0.00 1482 0.00 0.00 std:_Niter_base::迭代器类型std:_Niter_base(无符号字符*)
0.00 0.00 0.00 1247 0.00 0.00标准::_Vector_base::_M_get_Tp_分配器()
0.00 0.00 0.00 988 0.00 0.00__gnu_cxx::_normal_迭代器::base()常量
0.00 0.00 0.00 988 0.00 0.00标准::移动迭代器::基()常数
0.00 0.00 0.00 988 0.00 0.00标准::向量::大小()常数
0.00 0.00 0.00 988 0.00 0.00标准:_Iter_base:_S_base(标准::移动迭代器)
0.00 0.00 0.00 988 0.00 0.00标准::移动迭代器::移动迭代器(无符号字符*)
0.00 0.00 0.00 988 0.00 0.00 std:_Miter_base::迭代器类型std:_Miter_base(std::move_迭代器)
0.00 0.00 0.00 988 0.00 0.00标准::移动迭代器标准::生成移动迭代器(无符号字符*常量&)
0.00 0.00 0.00 741 0.00 0.00\u gnu\u cxx::新的\u分配器::最大大小()常量
0.00 0.00 0.00 555 0.00 0.00运算符新(无符号整数,无效*)
0.00 0.00 0.00 541 0.00 0.00无效标准:_销毁_辅助:_销毁(未签名字符*,未签名字符*)
0.00 0.00 0.00 541 0.00 0.00 std:_Vector_base:_M_deallocate(无符号字符*,无符号整数)
0.00 0.00 0.00 541 0.00 0.00无效标准:_销毁(未签名字符*,未签名字符*)

我总是得到零时间,对于任何代码,任何函数/

这是因为sleep()不算作进程执行时间的一部分,而是算作睡眠。i、 您的进程在请求的持续时间内由内核休眠,并且不使用任何CPU周期。尝试使用一些进行实际计算的循环。而且,gprof似乎不需要花时间来计算系统调用和其他事情的时间。它也有。Gprof旨在比较您自己的代码在后续重构中的性能增益,而不是作为一个通用的基准测试工具。

这是因为sleep()不算作流程执行时间的一部分,而是算作睡眠。i、 您的进程在请求的持续时间内由内核休眠,并且不使用任何CPU周期。尝试使用一些进行实际计算的循环。而且,gprof似乎不需要花时间来计算系统调用和其他事情的时间。它也有。Gprof旨在比较您自己的代码在后续重构中的性能增益,而不是作为一个通用的基准测试工具。

看起来您正在使用STL,它有许多内联方法。我也不确定gprof是否能正确处理这个问题。作为在某些情况下有效的示例,只需在示例程序中编写一个1到100000000的虚拟循环。您将看到一些计时信息。看起来您正在使用STL,它有许多内联方法。我也不确定gprof是否能正确处理这个问题。作为在某些情况下有效的示例,只需在示例程序中编写一个1到100000000的虚拟循环。您将看到一些计时信息。wldsvc的答案是正确的,您获得零时间的原因是
gprof
每秒对PC进行100次采样,而您的程序实际使用的CPU量远小于1/100秒。然而,
gprof
也会计算呼叫数,您可以看到这些。wldsvc的答案是正确的,您获得零时间的原因是
gprof
每秒对PC进行100次采样,而您的程序实际使用的CPU量远小于1/100秒。但是,
gprof
也会统计调用,您可以看到这些调用。
 time   seconds   seconds    calls  Ts/call  Ts/call  name
  0.00      0.00     0.00     1482     0.00     0.00  std::_Iter_base<unsigned char*, false>::_S_base(unsigned char*)
  0.00      0.00     0.00     1482     0.00     0.00  std::_Niter_base<unsigned char*>::iterator_type std::__niter_base<unsigned char*>(unsigned char*)
  0.00      0.00     0.00     1247     0.00     0.00  std::_Vector_base<unsigned char, std::allocator<unsigned char> >::_M_get_Tp_allocator()
  0.00      0.00     0.00      988     0.00     0.00  __gnu_cxx::__normal_iterator<unsigned char*, std::vector<unsigned char, std::allocator<unsigned char> > >::base() const
  0.00      0.00     0.00      988     0.00     0.00  std::move_iterator<unsigned char*>::base() const
  0.00      0.00     0.00      988     0.00     0.00  std::vector<unsigned char, std::allocator<unsigned char> >::size() const
  0.00      0.00     0.00      988     0.00     0.00  std::_Iter_base<std::move_iterator<unsigned char*>, true>::_S_base(std::move_iterator<unsigned char*>)
  0.00      0.00     0.00      988     0.00     0.00  std::move_iterator<unsigned char*>::move_iterator(unsigned char*)
  0.00      0.00     0.00      988     0.00     0.00  std::_Miter_base<std::move_iterator<unsigned char*> >::iterator_type std::__miter_base<std::move_iterator<unsigned char*> >(std::move_iterator<unsigned char*>)
  0.00      0.00     0.00      988     0.00     0.00  std::move_iterator<unsigned char*> std::make_move_iterator<unsigned char*>(unsigned char* const&)
  0.00      0.00     0.00      741     0.00     0.00  __gnu_cxx::new_allocator<unsigned char>::max_size() const
  0.00      0.00     0.00      555     0.00     0.00  operator new(unsigned int, void*)
  0.00      0.00     0.00      541     0.00     0.00  void std::_Destroy_aux<true>::__destroy<unsigned char*>(unsigned char*, unsigned char*)
  0.00      0.00     0.00      541     0.00     0.00  std::_Vector_base<unsigned char, std::allocator<unsigned char> >::_M_deallocate(unsigned char*, unsigned int)
  0.00      0.00     0.00      541     0.00     0.00  void std::_Destroy<unsigned char*>(unsigned char*, unsigned char*)