Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
15.03.2011, 10:42
|
|
Прописка
Регистрация: 06.03.2007
Сообщений: 144
Сказал спасибо: 22
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
|
Программа пропускает строки кода при отладке
Добрый день, подскажите, почему программа пропускает строки кода при отладке:
вызываю функцию
Код:
|
void NumImp(){
num=88;
if((num-128)›=0)
{
num=num-imp2;
impNum2=numTakt››1;
}
else{ impNum2=0;}
if((num-64)›=0){
num=num-imp4;
impNum4=numTakt››2;
}else{ impNum4=0;}
} |
При этом отладчик проскакивает строку "num=88" . До входа в эту функцию "num=89" . Почему выполняется первое условие
?
|
|
|
|
15.03.2011, 10:48
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Re: Программа пропускает строки кода при отладке.
|
|
|
|
15.03.2011, 11:09
|
|
Почётный гражданин KAZUS.RU
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
|
Re: Программа пропускает строки кода при отладке
Парадокс- если num =88 , и затем - вычитание, и спрашивается- num-128 больше нуля? Что ответить?
|
|
|
|
15.03.2011, 11:23
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Программа пропускает строки кода при отладке
Сообщение от sanstan
|
подскажите, почему
|
А типы переменных какие?
Сообщение от OlegNZH
|
Парадокс- если num =88 , и затем - вычитание, и спрашивается- num-128 больше нуля? Что ответить?
|
Да где же он, парадокс-то?
Происходит "заём". В результате 88-128=200. Больше "0"?
Последний раз редактировалось omercury; 15.03.2011 в 11:38.
|
|
|
|
15.03.2011, 11:33
|
|
Прописка
Регистрация: 06.03.2007
Сообщений: 144
Сказал спасибо: 22
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
|
Re: Программа пропускает строки кода при отладке
To Urry:
Спасибо, решил сразу много проблем.
|
|
|
|
15.03.2011, 11:35
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.11.2010
Адрес: г. Дзержинск Нижегородская обл.
Сообщений: 1,696
Сказал спасибо: 130
Сказали Спасибо 1,089 раз(а) в 521 сообщении(ях)
|
Re: Программа пропускает строки кода при отладке
Скорее всего компилятор произвел оптимизацию и выкинул неиспользованный код.
Из
Цитата:
|
num=88;
if((num-12 ›=0)
{
num=num-imp2;
impNum2=numTakt››1;
}
else{ impNum2=0;}
|
сделано
Цитата:
|
num=88-imp2;
impNum2=numTakt››1;
|
Т.е. ты в принципе не можешь встать на отладку в данном операторе, так как он удален в процесс оптимизации.
С аналогичной ситуацией в Дельфи неоднократно сталкивался. Хочу просмотреть значение локальной переменной при отладке, а в ответ "переменная удалена в ходе оптимизации". Т.е. результат считается сразу без занесения в промежуточные переменные.
|
|
|
|
15.03.2011, 11:47
|
|
Почётный гражданин KAZUS.RU
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
|
Re: Программа пропускает строки кода при отладке
Сообщение от omercury
|
А типы переменных какие?
Да где же он, парадокс-то?
Происходит "заём". В результате 88-128=200. Больше "0"?
|
Так в том-то и Интересность, как переменная объявлялась, а вдруг- плавующая?
И откуда такой бумк, не мог-же я столько шуму наделать? И откуда взялась эта зелёная тряпочка? (c) Просто- начерта присваивать-переменным значения- а потом их-уже известными-сравнивать? Если это- отладка- сорри(так скорее всего и есть), но в заблужение вводить,листинги нужно нормальными давать!
Последний раз редактировалось OlegNZH; 15.03.2011 в 11:56.
|
|
|
|
15.03.2011, 11:49
|
|
Прописка
Регистрация: 06.03.2007
Сообщений: 144
Сказал спасибо: 22
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
|
Re: Программа пропускает строки кода при отладке
Да , переменные были unsigned . Заменил на знаковые, все отлично работает!
|
|
|
|
16.03.2011, 00:39
|
|
Гражданин KAZUS.RU
Регистрация: 12.10.2009
Сообщений: 576
Сказал спасибо: 30
Сказали Спасибо 138 раз(а) в 110 сообщении(ях)
|
Re: Программа пропускает строки кода при отладке
Когда пропускаются строки, то есть 2 наиболее вероятных причины:
1. Проект скомпилирован с оптимизацией кода. В этом случае в програме теряется прямое сответствие между строками и ассемблерным интсрукциями, трассировка начинает подглючивать.
2. Еще при оптимизации часто наблюдается выкидываие переменных и лишних кусков кода. Отладчики часто глючат на отсутствующих кусках и часто падают при наличии optimixed out перменных если включен watch.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 13:25.
|
|