1

我有一个结合 Python 和 Cython 编写的应用程序。我最近向这个应用程序添加了一个新功能和测试。测试在我的本地机器(macbook)上通过,但是当我推送到 appveyor(Windows CI 服务)时,测试失败。这本身并不奇怪。当我将打印语句添加到我的 Cython 代码以尝试查看它在 appveyor 上运行时发生了什么时,测试不再失败。这令人沮丧,因为它让我无法弄清楚当 appveyor 上的测试失败时发生了什么。这也令人困惑,因为它违反了我对 Python 和 Cython 的一般工作方式的理解。

我的代码很复杂,我没有合理的方法来分享这种现象的示例。但是,我正在寻找可能发生这种情况的原因。Cython 代码中的打印语句如何以及在什么情况下会对其他计算产生影响?

4

2 回答 2

2

在我的经验中,典型的情况是您设法从未分配或未对齐的存储中获取值——简而言之,内存使用错误使编译器检测此类滥用的能力得到了优化。通常,您会得到一个垃圾值;print 语句强制“修复”问题的评估或内存对齐。

在大多数现代语言中,这很难意外做到,除非您专门“硬铸”一个值,在不改变位值的情况下更改类型。

于 2016-08-29T21:18:58.540 回答
1

为了节省一些时间,您可以尝试使用阻塞 RDP ( https://www.appveyor.com/docs/how-to/rdp-to-build-worker/ ) 进行更深入的调试,您可以在 Appveyor 构建的不同阶段插入它. 请注意,RDP 会话中的环境变量与构建代理过程中的环境变量不同,因此您可能需要调整 RDP 环境以获取 repo。

——伊利亚。

于 2016-08-29T21:21:29.950 回答