我有一个用Python和Cython组合编写的应用程序。我最近为此应用程序添加了一项新功能和测试。测试通过我的本地计算机(macbook),但是当我推送到appveyor(Windows CI服务)时,测试失败。这本身并不是那么奇怪。当我将打印语句添加到我的Cython代码中以试图查看在appveyor上运行时发生的情况时,测试不再失败。这令人沮丧,因为它让我无法弄清楚当appweor上的测试失败时发生了什么。它也只是令人困惑,因为它违反了我对Python和Cython如何工作的理解。
我的代码很复杂,我没有合理的方式来分享这种现象的例子。但是,我正在寻找可能发生这种情况的原因。 Cython代码中的print语句如何以及在什么情况下会对其他计算产生影响?
答案 0 :(得分:2)
根据我的经验,典型的情况是你设法从未分配或未对齐的存储中获取值 - 简而言之,内存使用错误使编译器能够检测到此类滥用。通常,您获得垃圾值; print语句强制进行“修复”问题的评估或内存对齐。
在大多数现代语言中很难做到这一点,除非你专门“强制转换”一个值,在不改变位值的情况下更改类型。
答案 1 :(得分:1)
为了节省一些时间,您可以尝试使用阻止RDP(associate data with a marker)进行更深入的调试,您可以在Appveyor构建的不同阶段插入它。请注意,RDP会话中的环境变量与构建代理程序进程不同,因此您可能需要调整RDP环境以获取存储库。
- 伊利亚安德。