在valgrind中运行程序时的连接超时

时间:2011-08-20 15:37:46

标签: c++ valgrind

我有一个使用gloox库连接到xmpp服务器的程序。如果我直接运行程序,连接总是成功。但是,该程序具有较高的CPU使用率。所以我转向valgrind寻求帮助。但是如果我用valgrind(--tool = callgrind)运行程序,连接总是超时。我不得不承认我是valgrind的新手,但为什么会这样呢?

3 个答案:

答案 0 :(得分:0)

Valgrind对已执行代码进行了大量转换,使其运行速度比本机慢10-50倍。因此,连接可能会超时。您可以在 strace 下运行带有配置程序的Valgrind,以通过错误代码找到此连接。

答案 1 :(得分:0)

如果您的原始问题是带有gloox的高CPU,我几乎可以确定您的程序每10毫秒轮询一次新的xmpp消息。 例如,使用recv(-1)代替recv(10)来运行您的程序。

http://camaya.net/glooxlist/dev/msg01191.html

答案 2 :(得分:0)

在遇到类似的问题和额外的调试之后,在解析xmpp xml节时会出现问题。 在我们的例子中,问题出在xpath解析器上,它使用了一个使用long2string的util.h函数int2string。

正常执行

int len = (int)( log( (double)( 10 ) ) / log( (double) 10 ) ) + 1; 

给出2,但在valgrind下给出1,并将所有内容都打破。

我们更换了功能

static inline const std::string int2string( int value )
    {
      return long2string( value );
    }

通过

#include <sstream>
static inline const std::string int2string( int value )
    {
      /* ADDON*/
      //when we call long2string, it does weird cmath log stuff and with computer precision,
      //the result may be different from an environnement to another. eg: when using valgrind
      std::ostringstream s;
      s << value;
      return s.str();
      /* ADDON */
      //return long2string( value );
    }