用于GLib和GDBus的静态分析工具

时间:2013-12-09 19:04:35

标签: memory-leaks static-analysis glib gdbus

有没有人知道使用GLib和GDBus时检测内存泄漏的任何工具或技术?我使用这两个库相对较新,并且相信我正确使用了API,但如果有一个工具可以用来确认我正确地清理我的资源,那就太棒了。我已经通过各种lint类型的程序运行我的代码,但是这些程序可能无法检测到抽象到库中的任何内容。

我正在寻找专门针对GLib或GDBus的工具,或者我可以使用的工具,以便针对这些库?也许甚至有一些我可以为GLib或GDBus设置的编译时标志?

1 个答案:

答案 0 :(得分:3)

我最近刚用glib / gdbus / libsoup做了一些伏都教,根据我的经验 valgrind valgrind / massif 做得很好(虽然不是真正的静态分析但是运行时分析)。


valgrind(即使对于g_slice_alloc / g_slice_new也使用malloc,使得valgrind不那么混乱,gc-friendly使所有glib内部指针无效)

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

输出中仍然存在误报 - 使用抑制文件来隐藏它们。


massif(使用常驻模块以防止大量噪音)

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)编译它们