Memory leaks GLib和GDBus的静态分析工具

Memory leaks GLib和GDBus的静态分析工具,memory-leaks,static-analysis,glib,gdbus,Memory Leaks,Static Analysis,Glib,Gdbus,有人知道在使用GLib和GDBus时检测内存泄漏的工具或技术吗?我对使用这两个库比较陌生,并且相信我正确地使用了API,但是如果有一个工具可以用来确认我正确地清理了我的资源,那就太好了。我已经通过各种lint类型的程序运行了我的代码,但这些程序可能没有检测到任何抽象到库中的内容 我正在寻找一个专门针对GLib或GDBus的工具,或者一个我可以针对这些库使用的工具?也许我甚至可以为GLib或GDBus设置一些编译时标志?我最近刚刚用GLib/GDBus/libsoup做了一些巫术,根据我的经验,v

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


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

我最近刚刚用GLib/GDBus/libsoup做了一些巫术,根据我的经验,valgrindvalgrind/massif做得很好(虽然不是真正的静态分析,而是运行时分析)


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

输出中仍然会有误报–使用抑制文件将其隐藏


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

使用一些可视化工具使体量输出可读(两个MB日志)。massif visualizer做得很好

请记住,glib有几MB的静态分配内容(所有的GObject类型类)


如果您需要自行调试库,则无法使用调试标志(-g)编译它们

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