1

我正在编写一个 python 程序,其中包含一个用 C 编写的扩展模块。扩展模块定义了一个在我的程序中不断使用的函数。

我的程序某处有内存泄漏,但我不知道如何找到它。我试过 1) 安装 Valgrind。但是,由于我有 OSX Mavericks (10.9) 并且 Valgrind 仅支持 OXS 10.7(并且 10.8 有点不稳定),因此我无法使其正常工作。2) 使用 gdb。我似乎无法让 gdb 运行 python 脚本,因为我需要在从我的 python 代码调用的 c 函数中设置一个断点。我相信我需要安装 python-debuginfo 才能做到这一点,但我做不到。3) 使用 pdb。但是,我不知道如何使用 pdb 调试 c 代码。

有没有一个很好的工具可以用来调试我的程序中的内存泄漏?

4

1 回答 1

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扩展。

于 2014-07-21T11:15:45.103 回答