Я знаю, что эта функция ничего не делает, но это делает ее более заметным. Оптимизация отключена, поэтому код действительно выполняется. Я испытал то же поведение в сложных функциях. Это только для того, чтобы показать проблему.
Я не думаю, что ни в коем случае точка выполнения попадает в условие IF, но это происходит с F10. < /P>
Это функция < /strong> для иллюстрации: < /p>
Код: Выделить всё
int AktualizujEfektivnuSadzbuDebug()
{
double cerpana_suma = 7.7;
cerpana_suma = 12.3;
if (cerpana_suma
На самом деле нет причин, по которой он должен войти в условие if. Их я использую f5, это не так. Но если я использую F10 из точки останова на assigmnent "cerpana_suma = 12,3", то 0 назначается в переменную. И кондиционирование проверяет его на 0 положительно. < /P>
Разборка линии выглядит так: < /p>
551A5E03 movsd xmm0,mmword ptr [__real@402899999999999a (55E26F48h)]
551A5E0B movsd mmword ptr [cerpana_suma],xmm0
xmmpling overpling. Первая строка ассемблера выше установлена на 0 вместо постоянной из памяти 0x55e26f48!
на самом деле. /> После выполнения второй строки ассемблера выше, переменная «cerpana_suma» при 0x020fc1c8 установлена на 0, что на самом деле является следствием недопустимого выполнения первой строки. src = "https://i.sstatic.net/22icqxm6.png"/>
Поэтому выполнение кода, если положительно оценка условия (cerpana_suma
желаемое поведение при этом приведет к тому же результату, что и удар F5, и оба дают один и тот же результат, что и запуск кода в целом.
, что может быть неправильно, что поведет в поведении между F10. Есть ли у кого -нибудь решение, так что по сравнению с правильной работой с регистрацией XMM0? Есть ли у кого -нибудь обходной путь? Уровень информации отладки установлен на максимум. Я пытался с вариантом динамической отладки и без него. Объявление переменной как летучая, не помогает. < /P>
Полные экраны отладки (память, реестр, разборка)
Подробнее здесь: https://stackoverflow.com/questions/797 ... ug-in-visu
Мобильная версия