我有一个使用gloox库连接到xmpp服务器的程序。如果我直接运行程序,连接总是成功。但是,该程序具有较高的CPU使用率。所以我转向valgrind寻求帮助。但是如果我用valgrind(--tool = callgrind)运行程序,连接总是超时。我不得不承认我是valgrind的新手,但为什么会这样呢?
答案 0 :(得分:0)
Valgrind对已执行代码进行了大量转换,使其运行速度比本机慢10-50倍。因此,连接可能会超时。您可以在 strace 下运行带有配置程序的Valgrind,以通过错误代码找到此连接。
答案 1 :(得分:0)
如果您的原始问题是带有gloox的高CPU,我几乎可以确定您的程序每10毫秒轮询一次新的xmpp消息。
例如,使用recv(-1)
代替recv(10)
来运行您的程序。
答案 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 );
}