我有一個程序使用gloox庫連接到xmpp服務器。如果我直接運行程序,連接總是成功。但是,該程序的CPU使用率很高。所以我轉向valgrind尋求幫助。但是如果我用valgrind(--tool = callgrind)運行程序,連接總是超時。我不得不承認我是valgrind的新手,但爲什麼會這樣呢?在valgrind中運行程序時的連接超時
1
A
回答
0
Valgrind對已執行代碼進行了大量轉換,使其運行速度比本機慢10-50倍。所以很可能連接超時。您可以使用strace下的異形程序運行Valgrind,以通過錯誤代碼找到此連接。
0
如果你原來的問題是一個gloox的高CPU,我幾乎可以肯定你的程序每10毫秒輪詢新的xmpp消息。 例如,用recv(-1)
而不是recv(10)
運行程序。
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);
}
相關問題
- 1. 在node.js中運行應用程序時,連接超時錯誤
- 2. spring-boot jar:只有在運行cron程序時連接超時
- 3. 如何在Valgrind中運行我的程序時進行調試?
- 4. 在valgrind下運行的程序中斷時線程棧回退
- 5. 從android studio在設備上運行應用程序時的連接超時
- 6. Java程序和網絡連接超時
- 7. Android Wear應用程序連接超時
- 8. 遠程連接Postgresql的超時時間
- 9. 運行valgrind時出錯
- 10. 從命令行運行時http連接超時
- 11. 遠程MySQL連接超時
- 12. Sql遠程連接超時
- 13. 連接超時
- 14. 連接超時
- 15. 連接超時
- 16. 連接超時
- 17. 連接超時
- 18. java中的連接超時?
- 19. SMO中的連接超時
- 20. asp.net中的連接超時
- 21. URLConnection中的連接超時
- 22. 在程序運行時,一旦用C連接到DB(Redis的)
- 23. 運行應用程序時連接到數據庫時出錯
- 24. javax.xml.transform.TransformerException:com.sun.org.apache.xml.internal.utils.WrappedRuntimeException:連接超時:連接
- 25. 從PowerShell運行程序超時
- 26. get java.net.SocketTimeoutException:運行視覺示例代碼時連接超時
- 27. 索引過程中Solr連接超時?
- 28. Android - 在未運行時處理應用程序連接更改
- 29. 連接超時值之前的ADO.net連接超時值
- 30. AlertManager在Openshift中運行時不能發送郵件(錯誤:getsockopt:連接超時)
Valgrind是由它的性質緩慢。連接上的超時值是多少?這是不可能的,但可以想象,你可能會擊中它。遊戲中可能還有別的東西。你有沒有嘗試tcpdump來檢查引擎蓋下發生了什麼? – Flexo