有关在调试模式下编译Python的问题

时间:2016-04-18 15:08:32

标签: python debugging memory-leaks ubuntu-12.04 valgrind

我使用的是Ubuntu 12.04,Python 2.7.3 我在共同编写的C扩展名中遇到了分段错误。它似乎来自一个没有正确免费的指针。

然后我使用valgrind来查找内存泄漏。根据{{​​3}},我必须在调试模式下编译Python以获得valgrind友好版Python并删除其无关的报告。

如何在调试模式下编译Python

即使我链接的答案回答了该问题的一部分,但它并没有为我提供足够的细节 事实上,我想了解发生了什么,而不仅仅是在某些地方打字,因为“谁知道?它可以工作”。

因此,我想知道:

  • 下载什么来编译Python?
  • 在哪里输入./configure
  • 我目前的装置会发生什么?它会影响我的系统吗?
    我已经在许多地方读过Ubuntu 12.04上的许多进程 由Python管理,我不想搞砸任何东西。

我也在试图找到Yair Daon评论中提到的问题的答案:

  • 完成使用调试后,是否必须重新编译Python 汇编

    • 如果是,如何将Python编译回标准模式?

1 个答案:

答案 0 :(得分:2)

以下是任何试图在Ubuntu上以调试模式编译Python的人的一些输入:

  1. python website下载所需的版本。
  2. 使用tar -xf解开它并转到新目录。

    例:
    tar -xf Python2.7.3.tgz cd Python-2.7.3

  3. 使用./configure --with-pydebug为调试模式配置python安装程序。它将创建一个您必须运行的Makefile

  4. 使用:Makefile运行make install,编译源代码以创建新的python解释器。

  5. 当您创建新的解释器时,您的系统的Python将保持干净。

    如果使用--prefix=/home/username/workspace/project/python/编译它,现在可以使用新的Python解释器运行脚本:

    /home/username/workspace/project/python/bin/python script.py

    或者,您也可以在脚本开头添加shebang行#!/home/username/workspace/project/python/bin/python,为其赋予执行权限(sudo chmod 764 script.py),并使用新的Python解释器通过键入{{}更轻松地运行它1}}。

    注意:您可能需要查看Python的文档以获取更多配置/编译标志 (例如--prefix / -j,感谢Chris的链接)。