Я не уверен, как объяснить поведение, которое я вижу, но здесь идет.
У меня есть функция foo, которая принимает три параметра: указатель, int и другой указатель. Когда я ломаю точку внутри foo, я ясно вижу, что все переменные - это те значения, которыми они должны быть. Однако, когда я опускаюсь ниже деклараций локальной переменной, один из параметров (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
}
}