【问题标题】:connection timeout when running a program in valgrind在 valgrind 中运行程序时连接超时
【发布时间】:2011-08-20 15:37:45
【问题描述】:

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

【问题讨论】:

  • Valgrind 天生就很慢。连接的超时值是多少?这不太可能,但可以想象你可能会遇到这个问题。可能还有其他事情在起作用。您是否尝试过 tcpdump 来检查引擎盖下发生了什么?

标签: c++ valgrind


【解决方案1】:

Valgrind 对已执行的代码进行了多次转换,使其运行速度比本机慢 10-50 倍。所以很可能连接超时。您可以使用 strace 下的分析程序运行 Valgrind,以通过错误代码定位此连接。

【讨论】:

    【解决方案2】:

    如果您最初的问题是 gloox 的高 cpu,我几乎可以肯定您的程序每 10 毫秒轮询一次新的 xmpp 消息。 例如,使用 recv(-1) 而不是 recv(10) 运行您的程序。

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

    【讨论】:

      【解决方案3】:

      在我遇到类似的问题和额外的调试后,它归结为解析 xmpp xml 节时出现的问题。 在我们的例子中,问题在于使用 util.h 函数 int2string 的 xpath 解析器,该函数使用 long2string。

      正常执行下

      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 );
          }
      

      【讨论】:

        猜你喜欢
        • 2015-12-02
        • 1970-01-01
        • 2015-01-07
        • 2018-01-16
        • 1970-01-01
        • 2011-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多