zHz00 Untitled

пятница, 15 сентября 2023
04:47 Лишняя строчка
Поступает от пользователя жалоба, что не работает одно из измерений. Открываю исходный код в нужном месте. Вижу там такое:

/*if(module_installed)
{
//...
}*/
if(module_installed)
//так, это я отключаю
if(data_value>data_max)
{
//...
}

Отступы были везде одинаковые. Но это была лишь видимость. Если приглядеться, то становится видно, что иф, который про данные, вложен в иф, который про модуль.

На приборе модуль установлен не был. Поэтому алгоритмическая часть, которая про данные, просто не вызывалась.

Раньше жалоб не было, потому что модуль всегда был установлен, и условие всегда проходило. Но в этот раз модуль был отключён. И вот результат.

Но эта ошибка -- не ошибка выставления отступов и не ошибка пропущенного кода. Наоборот. Покопавшись в репозитории я выяснил, что один из блоков кода был закомментирован за ненадобностью (здесь он приведён первым). Но его первую строчку я почему-то продублировал сразу после комментария.

@темы: Говнокод, Борьба с техникой

URL
- /userdir/0/0/6/5/0065/60498.jpg
Вооружившись дождем, испытай синеву неба на прочность.
Вчера ходили в 7 звезд на 2 эпизод. Супер, очень понравил...
Вся Корея постоянно что-то строит, днем и ночью. Куда ни ...
В обед хожу по рынкам. Вот она семейная жизнь...
Вовчик музычку прислал, написав: А, вот ещё, музы...

15.09.2023 в 08:59

15.09.2023 в 08:59
мне вот че интересно
если какая-нибудь крыса в коде заменит c на кириллическую с, как долго придется искать ошибку?
URL

15.09.2023 в 11:58

15.09.2023 в 11:58
Филавандрель, зависит от компилятора. Если он не поддерживает русские имена переменных, то сразу покажет: "некорректные символы".

Если поддерживает, то ситуация сложнее. Однако, если ты уже пару раз в жизни сталкивался с проблемой замены с на c, то вычислишь шпиона довольно быстро, т.к. всё равно будут показываться ошибки, но странные. Например, о необъявленном идентификаторе, а ты смотришь и такой -- "да вот же он!"

Гораздо хуже ситуация в некоторых интерпретируемых языках, там где отсутствие объявления переменной не является ошибкой. В некоторых случаях у тебя могут образоваться две переменные с одинаковыми на вид именами, но без синтаксических ошибок. Там можно будет искать ошибку долго...
URL

15.09.2023 в 12:58

15.09.2023 в 12:58
Гораздо хуже ситуация в некоторых интерпретируемых языках, там где отсутствие объявления переменной не является ошибкой. В некоторых случаях у тебя могут образоваться две переменные с одинаковыми на вид именами, но без синтаксических ошибок. Там можно будет искать ошибку долго...
а это частый случай?
URL

15.09.2023 в 15:32

15.09.2023 в 15:32
Филавандрель, ну с КРЫСАМИ, которые меняют буквы, я не встречался, а вот случайные ошибки бывали. Хорошо что на всяких пхп и питонах у меня маленькие проектики и разобраться там не так сложно.

Может быть, что ты в одном месте переменную называешь, допустим, data_size, а в другом size_data. По ошибке. Ты имел ввиду одну и ту же сущность, но назвал по разному. Ну и начинаешь присваивать и считывать и обнаруживаешь, что присвоенного значения в нужном месте нет. Потому что оно в другой переменной.
URL

15.09.2023 в 16:57

15.09.2023 в 16:57
zHz00, я не совсем точно написал, имел ввиду это:
Гораздо хуже ситуация в некоторых интерпретируемых языках, там где отсутствие объявления переменной не является ошибкой.
часто ли такое случается, или сегодня почти везде среда разработки подсказывает, в какой строке подстава
URL

15.09.2023 в 17:08

15.09.2023 в 17:08
Филавандрель, я тоже не совсем точно написал. Я имел ввиду это:
Гораздо хуже ситуация в некоторых интерпретируемых языках, там где переменные объявлять не только не надо, но и нельзя.

В этих языках переменные создаются при первом присваивании. Это и есть "как бы" объявление. Синтаксис, специально предназначенный для объявления переменных, отсутствует. Поэтому никакую ошибку найти нельзя. Её нет.

Есть утилиты, называемые "статические анализаторы кода". Они просматривают текст программы и ищут "подозрительные" места, которые не являются синтаксическими ошибками. Они помогают как раз искать такие странные логические ошибки. К сожалению, я не знаю, есть ли такие утилиты для питона. Я знаю только про утилиты для Си и Си++, но там нет проблем с объявлениями.
URL

15.09.2023 в 17:29

15.09.2023 в 17:29
zHz00, найс, теперь понял
URL
Добавить комментарий

Расширенная форма

Подписаться на новые комментарии
Получать уведомления о новых комментариях на E-mail