Вещи становятся незнакомыми и незнакомыми. Я принял вышеуказанные предложения и изучил код с помощью Reflector и разборку, предоставленную отладчиком, оба выглядят так, как вы ожидаете. Я немного изменил код, чтобы ясно показать «волшебное» изменение в переменной.
Новый код
int initialKeyCount;
#if(DEBUG)
// int initialKeyCount = _root.CountAllKeys();
initialKeyCount = 20000;
initialKeyCount++;
initialKeyCount = initialKeyCount;
#endif
currNode = currNode.EnsureDegreeKeysPresent(parent);
#if(DEBUG)
int currentKeyCount = _root.CountAllKeys();
Debug.Assert(initialKeyCount == currentKeyCount,
string.Format("EnsureDegreeNodesPresent changed the node count from {0} to {1}.", initialKeyCount, currentKeyCount));
#endif
Разборка для вышеупомянутого
int initialKeyCount;
#if(DEBUG)
// int initialKeyCount = _root.CountAllKeys();
initialKeyCount = 20000;
00000094 mov dword ptr [ebp-50h],4E20h
initialKeyCount++;
0000009b inc dword ptr [ebp-50h]
initialKeyCount = initialKeyCount;
0000009e nop
#endif
currNode = currNode.EnsureDegreeKeysPresent(parent);
0000009f mov edx,dword ptr [ebp-48h]
...
Используя окно памяти, я смотрел значение на ebp-0x50
Когда IP
в 00000094, значение 0x0
в 0000009b значение равно 0x4e20
в 0000009e значение равно 0x4e21
в 0000009f значение равно 0x4e01
Я признаю, что прошло долгое время с того момента, как я написал какой-либо ассемблерный код, но я вполне уверен, что nop не должен записывать в память. :)
Очевидно, что выполняется некоторый код, который не отображается отладчиком. Кто-нибудь знает, если есть что-то о том, как я использовал препроцессор, который вызывает это, или это просто ошибка?