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

发布于 2024-11-30 11:30:01 字数 227 浏览 0 评论 0原文

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

I have a program that uses the gloox library to connect to an xmpp server. Connection always succeeds if I run the program directly. However, the program is having high cpu usage. So I turned to valgrind for help. But if I run the program with valgrind (--tool=callgrind), the connection always times out. I have to admit I'm new to valgrind, but why is this happening?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

寂寞美少年 2024-12-07 11:30:01

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

Valgrind does a number of transformations of executed code, making it run 10-50 times slower than natively. So it is likely that connection times out. You can run Valgrind with profiled program under strace to locate this connection by error codes.

无悔心 2024-12-07 11:30:01

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

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

If your original problem is a high cpu with gloox, I'm almost sure that your program polls every 10 milliseconds for new xmpp messages.
Run your program with recv(-1) instead of recv(10) for example.

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

秋心╮凉 2024-12-07 11:30:01

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

在正常执行下

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

After I run into a similar problem and extra debugging, it comes down to a problem when parsing the xmpp xml stanza.
In our case, the problem was with the xpath parser that uses an util.h function int2string that use long2string.

Under normal execution

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

gives 2 but gives 1 under valgrind and break everything down.

We replaced the function

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

by

#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 );
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文