0

相互作用する複数のスレッドと、重複するネットワークI/O用のスレッドプールを含むネットワークプログラムがあります。Windows用のgccであるMinGWでコンパイルしています。

いくつかの異なるマシン間で、コンパイラの最適化なしで100%正常に動作しますが、最適化をオンにすると壊れます。

これが起こると予想されるべきですか、それとも私が修正する必要のあるバグを明らかにしていますか?

4

1 に答える 1

1

最も可能性の高い説明は、修正する必要のあるバグを明らかにしているというものです。スレッドの競合状態である可能性が高いですが、エイリアシング違反である可能性もあります。

特に問題を簡単に複製する場合に問題を特定するのに役立つ可能性のある1つのトリックは、影響を受けるファイルを見つけるためにバイナリ検索を実行することです。基本的に、ファイルの半分を最適化してコンパイルし、残りの半分を最適化せずにコンパイルします。コードが機能するかクラッシュするかを確認します。これにより、問題がコードの半分にローカライズされます。ファイルにローカライズするまで、問題のあるファイルを絞り込んで繰り返します。必要に応じて、そのファイルを2つに分割し、コードを1つのファイルから別のファイルに移動して、最適化されたときに失敗し、最適化されていないときに失敗するコードのチャンクを特定します。

于 2012-04-19T09:14:39.803 に答える