我正在编写一个包含用C编写的扩展模块的python程序。扩展模块定义了一个在我的程序中不断使用的函数。
我的程序中某处有内存泄漏,但我不知道如何找到它。我试过了 1)安装Valgrind。我不能让这个工作,但是因为我有OSX Mavericks(10.9)而Valgrind只支持OXS 10.7(和10.8有点不稳定)。 2)使用gdb。我似乎无法让gdb运行python脚本,因为我需要在从我的python代码调用的c函数中设置断点。我相信我需要安装python-debuginfo才能做到这一点,但我无法做到。 3)使用pdb。但是,我不知道如何使用pdb调试c代码。
我的程序中是否有一个很好的工具可用于调试内存泄漏?
答案 0 :(得分:0)
目前随Mac开发工具一起提供的调试器现在是lldb,它取代了gdb。该接口有点类似于gdb。您可以使用Homebrew安装gdb。
调试C扩展的方法就像任何其他共享库一样。调试加载共享库(您的扩展)的可执行文件(python),并设置在可执行文件加载共享库后变为有效的断点。
运行lldb:
lldb /path/to/python -- your_python_script.py
设置一些断点(替换为相关的断点)
(lldb) b some_source_file.c:4343
然后运行,调试器将在断点处停止
(lldb) r
现在您可以正常调试C扩展名。