【问题标题】:Questions about compiling Python in debug mode关于调试模式下编译Python的问题
【发布时间】:2016-08-10 10:05:09
【问题描述】:

我使用的是 Ubuntu 12.04、Python 2.7.3。
我与人共同编写的C 扩展中出现分段错误。它似乎来自一个没有正确释放的指针。

然后我使用valgrind 来查找内存泄漏。根据那个answer,我必须在调试模式下编译Python以获得valgrind的友好版本Python并摆脱它不相关的报告。

如何在调试模式下编译Python

即使我链接的答案回答了该问题的一部分,但它并没有为我提供足够的详细信息。
确实,我想了解正在发生的事情,而不仅仅是在某些地方键入内容,因为“谁知道?它可以工作”。

因此,我想知道:

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

我也在努力寻找 Yair Daon 评论中提到的问题的答案:

  • 使用调试完成后是否需要重新编译Python 编译?

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

【问题讨论】:

  • 问题“如何在调试模式下编译 Python”在您链接到的问题的已接受答案中给出。如果该答案不足以满足您的需求,则必须更详细地解释它们。
  • 只写了一个命令。我阅读了答案,但我不知道要下载什么,也不知道在哪里键入该命令,也不知道我以前安装的 Python 会发生什么(我不想弄乱我当前的 Python 安装......)。这就是为什么我在这里要求一个完整的解释。
  • 感谢您更新您的问题。 IMO 最好的办法是查看官方developer's guide。您可能会在“快速入门”标题下和setup page 上找到您需要的大部分内容。如果你在你的主目录中构建一个新的 Python,它不应该与你的系统 Python 冲突。只要确保不要运行sudo make install 或类似的(真的,除了使用apt-get 安装系统库等,你根本不需要sudo)。
  • 不要不要在 Ubuntu 下改变系统 Python,你会搞砸你的系统,因为太多的 Ubuntu 机制是基于 Python 的。不要做sudo make install,从您的个人构建目录运行您的自定义解释器。

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


【解决方案1】:

以下是任何尝试在 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 编译源代码以创建新的python 解释器,使用:make install

当您创建一个新的解释器时,您系统的 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),然后通过键入 ./script.py 使用新的 Python 解释器更轻松地运行它。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多