【问题标题】:Debug cython code (.pyx) when using the python debugger (pdb) - Best Practice使用 python 调试器 (pdb) 时调试 cython 代码 (.pyx) - 最佳实践
【发布时间】:2015-12-29 13:29:23
【问题描述】:

我已阅读 Cython debugging, put a break pointhttps://groups.google.com/forum/#!topic/apam-python-users/6rsRwcCAms4 并想知道在调试从 python 代码调用的 cython 代码时最好的工作流程是什么?

理想情况下,我想在从我的 IDE (pycharm) 启动的 python 调试会话期间进入 .pyx 文件,但这似乎是不可能的。 pyx文件被cythonized时是不是可以编译调试信息,以便调试器可以介入?

如果这不能实现,有什么替代方案(除了不使用 cython!)?

由于这个问题具体是问如何单步进入cython代码,虽然和Cython & Python Project Test Driven Development and .pyx file structure advice很像,但又不一样。

【问题讨论】:

标签: python python-2.7 debugging pycharm cython


【解决方案1】:

看来official way 是您的最佳选择。如果有一个简单的替代方案,那就太好了,但从您包含的链接here 看来似乎没有。这个wiki 文档似乎还有一些官方文档缺少的额外提示。

【讨论】:

    【解决方案2】:

    如果您仅使用 Cython 来提高速度(即不包装 C 库),您可以使用 pure Python mode,它允许您在单独的 .pxd 文件中定义类型(该文件与您的 .py 文件中的代码一起存在) ),或者使用装饰器。

    这种模式的优点是您的代码可以在纯 Python 下运行(和调试)。然后,您会留下(希望很小)类由于 Cython 静态类型而不是您的代码引起的错误。缺点是:1)在纯Python下运行你的代码会比较慢; 2)语法比标准的 Cython 语法有点混乱; 3) 你不能像这样访问外部 C 代码,这是 Cython 的主要用例之一。

    您最好的选择是传统的“大量打印语句”。 print locals() 在这里很有用!但这并不完全令人满意。

    【讨论】:

    • 这个答案感觉有点像“不要使用cython”。
    • 这更像是“让你的代码工作,然后使用 Cython 来加速它”。不可避免的是,它与 Python 调试器的集成不是特别好。以我的经验,调试器很不错,但您通常需要它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 2014-10-24
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    • 2020-06-20
    相关资源
    最近更新 更多