2011-08-20 1 views
1

gloox 라이브러리를 사용하여 xmpp 서버에 연결하는 프로그램이 있습니다. 프로그램을 직접 실행하면 연결이 항상 성공합니다. 그러나 프로그램의 CPU 사용량이 높습니다. 그래서 나는 valgrind에게 도움을 청했습니다. 그러나 valgrind (--tool = callgrind)를 사용하여 프로그램을 실행하면 연결 시간이 항상 초과됩니다. 나는 밸 글린 드가 처음이라는 것을 인정해야하지만, 왜 이런 일이 일어나고 있습니까?valgrind에서 프로그램을 실행할 때 연결 시간 초과가

+0

하여 기능

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

를 교체했다. 연결에 대한 시간 초과 값은 무엇입니까? 그것은있을 법하지 않지만, 당신이 그것을 타격을 줄 수 있다고 생각할 수 있습니다. 놀이에 뭔가가있을 수 있습니다. 후드 아래에서 무슨 일이 일어나고 있는지 확인하기 위해 tcpdump를 시도 했습니까? – Flexo

답변

0

Valgrind는 실행 된 코드의 변형을 여러 번 수행하므로 기본적으로 실행 속도가 10-50 배 느립니다. 따라서 연결 시간이 초과 될 가능성이 있습니다. Valgrind를 strace 아래의 프로파일 된 프로그램과 함께 실행하여이 연결을 오류 코드별로 찾을 수 있습니다.

0

만약 당신의 원래 문제가 높은 cpu와 gloox, 나는 거의 확신합니다 귀하의 프로그램을 폴링 매 10 밀리 초에 대한 새로운 xmpp 메시지입니다. 예를 들어 recv(10) 대신 recv(-1)으로 프로그램을 실행하십시오. 나는 비슷한 문제 및 추가 디버깅으로 실행 한 후 XMPP의 XML 스탠자를 구문 분석 할 때

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

0

, 그것은 문제가 내려 온다. 우리의 경우, 문제는 long2string을 사용하는 util.h 함수 int2string을 사용하는 xpath 파서에서 발생했습니다.

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

2를 제공하지만, Valgrind의 아래에 1을 제공하고 모든 것을 파괴 실행 정상에서.

우리는 Valgrind의는 본질적으로 느린

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