4

以前にこのバグに遭遇したことがあるかどうか疑問に思いました。IFの1行で、条件はFALSEを返しますが、実行はTRUE部分に進みます。

私はここで何か間違ったことをしていますか?retrieserrorToleranceタイプの両方でIntegerあり、以下のスクリーンショットから、retriesは未満ですerrorTolerance。しかし、それでもそのTrue部分のステートメントを実行します。

条件がFalseの場合、ステートメントはTRUE部分に移動します

これは私のプログラムを台無しにしてきたので、私がしたことThrow New Exceptionは別の行に配置して閉じることでした、End Ifそしてそれは機能します。

私の質問は、以前のコードの何が問題になっているのでしょうか?

4

2 に答える 2

1

最適化を無効にして、コード行と対応するコンパイル済み命令の間に明確な線形対応があることを確認します。

これがリリースモードのコンパイルでありretries、スコープ外のローカル変数である場合、コンパイラは、retries最初に保持するレジスタに増分値を格納することを最適化した可能性がありますが、式を検査するときにそのレジスタを使用します。

これを確認するために、リリースモードでは同じ値がretries表示され、デバッグモードで再コンパイルすると値が1つ大きくなります。行をステップスルーするときに、変数を個別に調べます。errorToleranceretries

于 2012-07-11T15:04:30.757 に答える
1

コーディングを続けないわけにはいかないので、通常のIf...End Ifブロックに頼りました。Visual Studioとコンパイラーはコードを完全に実行しますが、なぜこの式がVSを妨害したのか疑問に思いました。

于 2012-07-12T07:15:42.257 に答える