在 valgrind 中运行程序时连接超时
我有一个程序,它使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
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.
如果您最初的问题是 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 ofrecv(10)
for example.http://camaya.net/glooxlist/dev/msg01191.html
在我遇到类似的问题和额外的调试后,它归结为解析 xmpp xml 节时的问题。
在我们的例子中,问题出在使用使用 long2string 的 util.h 函数 int2string 的 xpath 解析器。
在正常执行下
给出 2,但在 valgrind 下给出 1 并分解所有内容。
我们将该函数替换
为
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
gives 2 but gives 1 under valgrind and break everything down.
We replaced the function
by