【问题标题】:Static Analysis Tools for GLib and GDBusGLib 和 GDBus 的静态分析工具
【发布时间】:2013-12-09 19:04:35
【问题描述】:

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

我正在寻找专门针对 GLib 或 GDBus 的工具,还是我可以针对这些库进行检测的工具?也许我什至可以为 GLib 或 GDBus 设置一些编译时标志?

【问题讨论】:

    标签: memory-leaks static-analysis glib gdbus


    【解决方案1】:

    我最近刚刚用 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
    

    输出中仍然会有误报 - 使用抑制文件隐藏它们。


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多