2011-08-20 102 views
1

我有一個程序使用gloox庫連接到xmpp服務器。如果我直接運行程序,連接總是成功。但是,該程序的CPU使用率很高。所以我轉向valgrind尋求幫助。但是如果我用valgrind(--tool = callgrind)運行程序,連接總是超時。我不得不承認我是valgrind的新手,但爲什麼會這樣呢?在valgrind中運行程序時的連接超時

+0

Valgrind是由它的性質緩慢。連接上的超時值是多少?這是不可能的,但可以想象,你可能會擊中它。遊戲中可能還有別的東西。你有沒有嘗試tcpdump來檢查引擎蓋下發生了什麼? – Flexo

回答

0

Valgrind對已執行代碼進行了大量轉換,使其運行速度比本機慢10-50倍。所以很可能連接超時。您可以使用strace下的異形程序運行Valgrind,以通過錯誤代碼找到此連接。

0

後,我遇到了類似的問題和額外的調試,它在解析XML的XMPP節時歸結爲一個問題。 在我們的例子中,問題出現在使用使用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); 
    }