如何检查Guile扩展模块中的内存泄漏?

8 投票
1 回答
445 浏览
提问于 2025-04-11 09:15

我正在为Guile开发一个扩展模块,这个模块是用C语言写的。这个扩展模块里面嵌入了一个Python解释器。

因为这个扩展模块会调用Python解释器,所以我需要确认它能正确管理Python对象占用的内存。

我发现Python解释器在处理内存方面表现得很好,所以通过运行valgrind这个工具,我可以找到由于我自己嵌入Python解释器的代码中的错误而导致的内存泄漏,只要没有其他干扰因素。

但是,当我在valgrind下运行Guile时,valgrind报告了内存泄漏。这些内存泄漏会掩盖我自己代码中的内存泄漏。

我的问题是,我该如何区分由于我代码中的错误导致的内存泄漏和valgrind报告的由于Guile导致的内存泄漏呢?有没有其他工具可以替代valgrind?或者使用valgrind的特殊选项?还是说干脆放弃,依靠手动检查代码呢?

1 个回答

8

你有几个选择。一个是为valgrind写一个抑制文件,这样可以关闭那些你不想关注的报告。比如,Python就有这样的文件,链接在这里: http://svn.python.org/projects/python/trunk/Misc/valgrind-python.supp

如果valgrind对你的设置不太友好,另一个选择是使用 libmudflap;你可以用 gcc -fmudflap -lmudflap 来编译你的程序,这样生成的代码就会包含指针调试的功能。具体的内容可以在gcc的文档中找到,链接在这里: http://gcc.gnu.org/wiki/Mudflap_Pointer_Debugging

撰写回答