zHz00 Untitled

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

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

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

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

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

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

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

URL
Был на море - не проникся, море холодное, компания скучна...
Совсем забыл... Многие водители, после того, как разбил...
Наши тоже ничего
Идей много, реалиЗА!ция страдает.
Рождение ребенка займет девять месяцев, независимо от тог...
Нет ничего лучше, чем утро субботы... Просыпаешься назл...

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