我开发了用C编写的Guile扩展模块。该扩展模块嵌入了Python解释器。

由于此扩展模块调用了Python解释器,因此我需要验证其是否正确管理了Python对象占用的内存。

我发现Python解释器在其自身的内存处理方面表现良好,因此,如果没有其他干扰因素,运行valgrind可以发现由于我自己的Python解释器嵌入代码中的错误而导致的内存泄漏。

但是,当我在valgrind下运行Guile时,valgrind报告内存泄漏。 这样的内存泄漏掩盖了由于我自己的代码引起的任何内存泄漏。

问题是我该怎么做才能将代码中的错误导致的内存泄漏与valgrind报告的由于Guile导致的内存泄漏区分开来。 替代valgrind的另一种工具? 特殊的valgrind选项? 放弃并依靠手动代码演练?

===============>>#1 票数:6 已采纳

您有两种选择。 一种是为valgrind编写一个supressions文件,该文件会关闭您未使用的内容的报告。 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

  ask by Omer Zak translate from so

未解决问题?本站智能推荐:

1回复

让Valgrind从Python脚本调用的C ++程序中检测内存泄漏:

如果C ++程序是由python脚本调用的,那么如何让Valgrind检查C ++程序中而不是仅脚本中的泄漏? 例如,如果leak.cc包含以下代码 并编译成a.out ,而call_aout.py包含 然后通过运行valgrind 不会在leak.cc检测到内存泄漏,
1回复

python防止内存溢出(valgrind确认内存泄漏)

我只是使用valgrind来分析我的应用程序的内存泄漏,因为我的内存(8 GB)溢出了很长时间。 内存使用量随运行时间而增加。 我只是发现这种行为可能是故意的: Python内存泄漏? 除了产生新进程来防止此行为之外,还有其他方法吗? 我已经尝试使用python垃圾收集器,但
1回复

C ++或Cython内存泄漏?

我正在研究用cython编写的python扩展模块,该模块包装了我编写的C ++类。 碰撞 我有一个简单的python代码,可以导入此python模块并使用它处理一些数据。 现在,大约有四分之一的时间,程序终止在调用模块之后终止。 这也意味着所有数据都已正确处理。 它是这样的段
1回复

Python Api C产生内存泄漏

我有这个简单的代码,可以在C运行一个小的python代码: 我使用valgrind测试了代码,并且内存泄漏(此处为输出 )。 经过一些测试,我发现内存泄漏是由指令Py_Initialize();引起的Py_Initialize(); 。 我怎么解决这个问题? 我使用以下标志运
1回复

Python2.4上的Valgrind:“可能丢失了”大量内存

我写了一些代码,没有错误。 该代码使用MySQLdb进行(频繁)数据库访问,并使用4个不同的数据库。 还会生成几个日志文件,并使用日志记录模块。 真正的担心是,在运行Valgrind时,我得到以下信息 最大的泄漏是 因此,您看到,它显示几乎1MB的内存可能丢失了。 我的代
6回复

在valgrind下运行python会显示许多内存错误,这是正常的吗?

我试图在我的Python C扩展中调试内存崩溃,并尝试在valgrind下运行脚本。 我发现valgrind输出中有太多“噪音”,即使我运行简单的命令: Valgrind输出完整的重复信息,如下所示: Slackware 12.2上的Python 2.5.2。 这是正常的
3回复

在Apache httpd和模块中搜索内存泄漏

在Apache httpd和httpd模块中查找内存泄漏的最佳方法是什么? 有什么方法吗? 我尝试了valgrind一点,但是出现了很少的障碍: Valgrind希望二进制文件正常退出。 我已经设法通过MaxRequestsPerChild和-X参数来做到这一点。
1回复

Valgrind检查C中的内存泄漏

我们在C中编写了一套代码,它将dir中的Matlab数据文件(.mat)作为输入,它还调用GSL函数来搜索多项式的根,并生成随机数。 我们正在研究OSX。 我们使用Valgrind检查是否有任何内存泄漏,因为我们在代码中使用了大量的malloc和free 。 它确实帮助我们在很多地方找到了
1回复

libcurl中的内存泄漏

在我的程序中添加最后的触摸后,我运行valgrind来检查内存泄漏。 让我吃惊,我读到了使用的内存大块的和永远不会释放,但我确信我释放我结束程序之前,利用一切资源。 仔细观察报告,我发现几乎所有的报告都说泄漏来自libcurl函数调用。 以下是报告中的示例: 这是valgrind抱
1回复

使用valgrind调试php扩展的内存泄漏

有很多'?' 在调试php扩展的内存泄漏的日志中,所以使用valgrind.It建议程序应该避免在共享对象上调用dlclose。 我怎样才能做到这一点? 可以说它只能通过修改php的源代码来实现吗?