1

Python と Cython の組み合わせで作成されたアプリケーションがあります。最近、このアプリケーションに新しい機能とテストを追加しました。ローカル マシン (Macbook) ではテストに合格しますが、appveyor (Windows CI サービス) にプッシュするとテストが失敗します。これ自体はそれほど奇妙ではありません。Cython コードを appveyor で実行したときに何が起こっているかを確認するために print ステートメントを追加すると、テストが失敗しなくなりました。appveyor でテストが失敗したときに何が起こっているのかを理解する方法がないため、これはイライラします。また、Python と Cython が一般的にどのように機能するかについての私の理解に違反しているため、当惑しています。

私のコードは複雑で、この現象の例を共有する合理的な方法はありません。ただし、これが発生する可能性のある理由を探しています。Cython コードの print ステートメントは、どのように、どのような状況で他の計算に影響を与える可能性がありますか?

4

2 に答える 2

2

私の経験の典型的なケースは、割り当てられていない、または整列されていないストレージから値を取得できた場合です。つまり、そのような乱用を検出するコンパイラの能力を微調整するメモリ使用エラーです。通常、ガベージ値を取得します。print ステートメントは、問題を「修正」する評価またはメモリの配置を強制します。

これは、ビット値を変更せずに型を変更して値を具体的に「ハードキャスト」しない限り、最近のほとんどの言語で誤って行うのは困難です。

于 2016-08-29T21:18:58.540 に答える
1

時間を節約するために、Appveyor ビルドのさまざまな段階に挿入できるブロッキング RDP ( https://www.appveyor.com/docs/how-to/rdp-to-build-worker/ ) を使用して、より深いデバッグを試みることができます。 . RDP セッションの環境変数はビルド エージェント プロセスとは異なるため、リポジトリを取得するには RDP 環境を調整する必要がある場合があることに注意してください。

――イリヤ。

于 2016-08-29T21:21:29.950 に答える