替代适用于64位Linux的googleperf工具

时间:2011-11-15 11:44:10

标签: c++ google-perftools

正如你们中的一些人可能知道谷歌提供免费的大量工具来分析c ++代码: http://code.google.com/p/google-perftools/

问题是64位上显然存在一些libunwind问题,作者无法做任何事情来修复它(

  

但我不指望   很快就会修复:它取决于libc人员和libunwind   人们解决了一些锁定问题。遗憾的是没有   我们自己能做的很多。

),所以我正在寻找替代品。 是否有任何类似的工具提供分析数据的酷图形表示(例如:enter image description here

编辑:从README粘贴解释问题:

  

2)在x86-64 64位系统上,虽然tcmalloc本身工作正常,但是   cpu-profiler工具不可靠:它有时会起作用,但有时候会起作用   导致段错误。我先解释一下这个问题,然后再解释一下   的解决方法。

     

请注意,这只会影响cpu-profiler,它是一个   google-perftools功能必须通过设置来手动打开   CPUPROFILE环境变量。如果你没有打开cpu-profiling,   你不应该看到由于穿孔工具造成的任何崩溃。

     

血腥细节:潜在的问题在于回溯()   function,这是libc中的内置函数。回溯是公平的   在正常情况下直截了当,但在遇到问题时可能会遇到问题   必须回溯信号帧。不幸的是,   cpu-profiler使用信号来注册分析事件,所以   探查器确实穿过信号帧的每个回溯。

     

根据我们的经验,唯一出现问题的时候是信号   在pthread_mutex_lock中间触发。 pthread_mutex_lock是   从系统库中调用了很多,特别是在程序中   启动时和创建新线程时。

     

解决方案:矮人调试格式支持'cfi   注释',这使得识别信号帧变得容易。一些OS   Fedora和gentoo 2007.0等发行版已经添加了   cfi对他们的libc的注释。 libunwind的未来版本应该   认识到这些注释;这些系统不应该看到任何   crashses。

     

解决方法:如果您在运行时遇到崩溃问题   cpu-profiler,考虑插入ProfilerStart()/ ProfilerStop()   你的代码,而不是设置CPUPROFILE。这只会配置文件   代码库的那些部分。虽然我们没有做太多测试,   理论上,这应该通过限制崩溃来减少崩溃的机会   信号只生成代码库的一小部分。理想情况下,你   不会在生成的代码周围使用ProfilerStart()/ ProfilerStop()   新线程,否则可能会导致调用   调用pthread_mutex_consistent_np!

     

--- 2011年5月17日

1 个答案:

答案 0 :(得分:4)

Valgrind有一系列精彩的工具,包括callgrind来分析代码。 callgrind和cachegrind的gui客户端是kcachegrind