簡體   English   中英

GLib和GDBus的靜態分析工具

[英]Static Analysis Tools for GLib and GDBus

是否有人知道使用GLib和GDBus時檢測內存泄漏的任何工具或技術? 對於使用這兩個庫,我還比較陌生,並且認為我可以正確使用API​​,但是如果有一個我可以用來確認自己正確清理資源的工具,那就太好了。 我已經通過各種lint型程序運行了我的代碼,但是這些程序可能無法檢測到抽象到庫中的任何內容。

我正在尋找專門針對GLib或GDBus的工具,還是可以針對這些庫定位的工具? 也許甚至可以為GLib或GDBus設置一些編譯時標志?

我最近剛剛用glib / gdbus / libsoup做了一些巫術,根據我的經驗, valgrindvalgrind / massif做得很好(盡管不是真正的靜態分析,而是運行時分析)。


valgrind(甚至對g_slice_alloc / g_slice_new都使用malloc,從而使valgrind更加混亂,對gc友好的方法使所有glib內部指針無效)

G_DEBUG=gc-friendly G_SLICE=always-malloc valgrind ./yourapp

輸出中仍然存在誤報–使用抑制文件將其隱藏。


地塊(使用常駐模塊以防止產生大量噪音)

G_DEBUG=resident-modules valgrind --tool=massif --depth=10 --max-snapshots=1000 --alloc-fn=g_malloc --alloc-fn=g_realloc --alloc-fn=g_try_malloc          --alloc-fn=g_malloc0 --alloc-fn=g_mem_chunk_alloc --threshold=0.01 ./yourapp --your --app --options

使用一些可視化工具使Massifs輸出可讀(一對MB日志)massif-visualizer做得很好

請記住,glib有幾個MB的靜態分配的東西(所有GObject類型類)


如果您需要自行調試庫,則無法使用調試標志(-g)對其進行編譯。

暫無
暫無

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

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