私は見ている振る舞いを説明する方法がわかりませんが、ここにはあります。関数内の変数を置き換えるMSコンパイラの最適化?
私は3つのパラメータ、ポインタ、int、および別のポインタをとる関数fooを持っています。 fooの中でブレークポイントを設定すると、すべての変数が必要な値であることがわかります。しかし、私がローカル変数宣言を超えて降りると、パラメータの1つ(int)が突然ゼロに変わります。しかし、残りの関数は元の値であるかのように実行されるため、すべて正常です。
これは完全なデバッグでは発生しませんが、通常のデバッグでは発生します。これはある種の最適化ですか?もしそうなら、それは何と呼ばれ、どこで詳細を得ることができますか?
例:あなたが最適化されたコードをデバッグしている
void foo(void *A, int B, void *C)
{
// B == 5
int X = 3;
char *Y = getSomeStaticString();
// ... some other variable declarations like the above
// B, according to the debugger, is now 0
if (B == 5) {
// But this still executes
}
}
それでした!ありがとう – Sydius