簡體   English   中英

使用巨大的Valgrind和低級C ++ API

[英]Using Valgrind and Low Level C++ APIs which are Gigantic

我發現了“ 有人使用Valgrind和Qt嗎? ”的問題,雖然這似乎澄清了一些事情,但我發現它所持有的信息仍然是一個免費的問題。 我想知道的是為什么 - 當我調試我的應用程序時(尤其是Qt) - 我看不到對我創建的函數的引用? 相反,我發現來自較低API(例如Qt)的大量信息似乎有很多內存泄漏。 這是否意味着我的應用程序沒有任何內存泄漏,或者它是否意味着有太多關於內存泄漏的信息,它首先針對較低級別的API,然后選擇繼續使用更高級別的代碼?

我使用以下標志運行我的valgrind可執行文件:

valgrind  --leak-check=full  --show-reachable=yes -v ./HelloGL 

還有,這到底是怎么回事?

ERROR SUMMARY: 925 errors from 899 contexts (suppressed: 29 from 7)

Pastebin

我認為你的問題是調用樹非常深。 您可以使用以下方法調整報告的深度

--num-callers=<number> [默認值:12]

指定標識程序位置的堆棧跟蹤中顯示的最大條目數。 請注意,僅使用前四個功能位置(當前功能中的位置以及其三個直接呼叫者的位置)常見錯誤。 因此,這不會影響報告的錯誤總數。

最大值為50.請注意,較高的設置將使Valgrind運行速度稍慢並占用更多內存,但在處理具有深層嵌套調用鏈的程序時非常有用。

問題是Qt的內部問題還是由於您使用Qt引起的問題很難回答。 但是,當呼叫跟蹤無法返回到您的代碼時,很難確定問題的確切位置。 總的來說,你應該假設你的代碼比Qt更容易出錯。

關於錯誤摘要: valgrind總共發現了954個錯誤。 但是,其中29個來自已知會導致問題的函數,因此錯誤消息被抑制。 事實上,這29個問題發生在已知導致問題的七個地點(功能,環境)中。 其他925錯誤未被抑制,這意味着它們要么來自您的代碼,要么是新發現的,在系統代碼出錯之前從未發現過。 這些錯誤有899個單獨的上下文(所以有很多不同的地方造成麻煩,只有很少的重復)。 上下文是記錄的調用鏈(產生特定錯誤的函數)的片段。 所以,確定了很多問題。 您只需要能夠看到哪些功能觸發了這些問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM