что такое ошибка в программе

Что такое баги, ворнинги и исключения в программировании

Разбираемся, какие бывают типы ошибок в программировании и как с ними справляться.

что такое ошибка в программе. 3cadc6192efdb62e6d1215d7eb4f373f. что такое ошибка в программе фото. что такое ошибка в программе-3cadc6192efdb62e6d1215d7eb4f373f. картинка что такое ошибка в программе. картинка 3cadc6192efdb62e6d1215d7eb4f373f. Разбираемся, какие бывают типы ошибок в программировании и как с ними справляться.

что такое ошибка в программе. 821e7a0a41de2ee14e961e3857aca8c6. что такое ошибка в программе фото. что такое ошибка в программе-821e7a0a41de2ee14e961e3857aca8c6. картинка что такое ошибка в программе. картинка 821e7a0a41de2ee14e961e3857aca8c6. Разбираемся, какие бывают типы ошибок в программировании и как с ними справляться.

Многим известно слово баг (англ. bug — жук), которым называют ошибки в программах. Однако баг — это не совсем ошибка, а скорее неожиданный результат работы. Также есть и другие термины: ворнинг, исключение, утечка.

В этой статье мы на примере C++ разберём, что же значат все эти слова и как эти проблемы влияют на эффективность программы.

что такое ошибка в программе. kucheryaviy. что такое ошибка в программе фото. что такое ошибка в программе-kucheryaviy. картинка что такое ошибка в программе. картинка kucheryaviy. Разбираемся, какие бывают типы ошибок в программировании и как с ними справляться.

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

Ошибки в программировании

Словом «ошибка» (англ. error) можно описать любую проблему, но чаще всего под ним подразумевают синтаксическую ошибку — некорректно написанный код, который даже не скомпилируется:

Компилятор тут же скажет, что в коде ошибка и скорее всего не хватает запятой или точки с запятой.

что такое ошибка в программе. 18563129062020 6a4e9b3ae3023faad72ace61e6264ce47ed78056. что такое ошибка в программе фото. что такое ошибка в программе-18563129062020 6a4e9b3ae3023faad72ace61e6264ce47ed78056. картинка что такое ошибка в программе. картинка 18563129062020 6a4e9b3ae3023faad72ace61e6264ce47ed78056. Разбираемся, какие бывают типы ошибок в программировании и как с ними справляться.

Также существуют ворнинги (англ. warning — предупреждение). Они не являются ошибками, поэтому программа всё равно будет собрана. Вот пример:

что такое ошибка в программе. 18563129062020 e3ea06ecc4efe66fd609360c227a5daace25eda6. что такое ошибка в программе фото. что такое ошибка в программе-18563129062020 e3ea06ecc4efe66fd609360c227a5daace25eda6. картинка что такое ошибка в программе. картинка 18563129062020 e3ea06ecc4efe66fd609360c227a5daace25eda6. Разбираемся, какие бывают типы ошибок в программировании и как с ними справляться.

Предупреждения не являются чем-то критичным, но могут иметь негативные последствия. Например, ваша программа будет использовать больше памяти, чем должна. Так как C++ нужен в том числе и для разработки высоконагруженных систем, этого допускать нельзя.

что такое ошибка в программе. 18563129062020 c3d4b76cd89b05f2c8e5da53f69c6d45806e9160. что такое ошибка в программе фото. что такое ошибка в программе-18563129062020 c3d4b76cd89b05f2c8e5da53f69c6d45806e9160. картинка что такое ошибка в программе. картинка 18563129062020 c3d4b76cd89b05f2c8e5da53f69c6d45806e9160. Разбираемся, какие бывают типы ошибок в программировании и как с ними справляться.

После восклицательного знака в треугольнике — количество предупреждений

Третий вид ошибок — ошибки сегментации (англ. segmentation fault, сокр. segfault, жарг. сегфолт). Они возникают, если программа пытается записать что-то в ячейку, недоступную для записи. Например:

Вот результат работы такого кода:

что такое ошибка в программе. 18563129062020 d58f50d1222620cd1cfe95da3a91221bd0d26e65. что такое ошибка в программе фото. что такое ошибка в программе-18563129062020 d58f50d1222620cd1cfe95da3a91221bd0d26e65. картинка что такое ошибка в программе. картинка 18563129062020 d58f50d1222620cd1cfe95da3a91221bd0d26e65. Разбираемся, какие бывают типы ошибок в программировании и как с ними справляться.

Баги в программах

Мы выяснили, что баг — это не совсем ошибка, а скорее неожиданное поведение программы или результат такого поведения. Баги могут быть чем-то забавным или неприятным. Например, как в играх:

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

Если ваш код приводит в действие какое-нибудь потенциально опасное устройство, то ценой такой ошибки может быть чья-нибудь жизнь. Такое случилось с кодом для аппарата лучевой терапии Therac-25 — как минимум два человека умерло и ещё больше пострадали из-за превышения дозы радиации.

Исключения в программах

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

Конвертировать введённое значение не всегда возможно, поэтому функция, которая занимается преобразованием, «выбрасывает» исключение (англ. exception). Это специальное сообщение говорит о том, что что-то идёт не так.

Если разработчик не описывает логику работы программы при вы выбрасывании исключения, то программа аварийно закрывается. Подробнее мы рассказали об этом в статье про ввод и конвертацию в C++.

Одно из самых известных исключений — переполнение стека (англ. stack overflow). В честь него даже назвали сайт, на котором программисты ищут помощь в решении своих проблем.

Компилятор C++ при этом может выдать ошибку сегментации, а не сообщение о переполнении стека:

что такое ошибка в программе. 18563129062020 27e9aa5bdf801f94f7728fe14d1ac08405e5a691. что такое ошибка в программе фото. что такое ошибка в программе-18563129062020 27e9aa5bdf801f94f7728fe14d1ac08405e5a691. картинка что такое ошибка в программе. картинка 18563129062020 27e9aa5bdf801f94f7728fe14d1ac08405e5a691. Разбираемся, какие бывают типы ошибок в программировании и как с ними справляться.

Вот аналогичный код на языке C#:

Однако сообщение в этот раз более конкретное:

что такое ошибка в программе. 18563129062020 db52642fc67f6c7c46657360f234a883af322464. что такое ошибка в программе фото. что такое ошибка в программе-18563129062020 db52642fc67f6c7c46657360f234a883af322464. картинка что такое ошибка в программе. картинка 18563129062020 db52642fc67f6c7c46657360f234a883af322464. Разбираемся, какие бывают типы ошибок в программировании и как с ними справляться.

В обоих случаях программа завершается, потому что не может дальше корректно работать.

Похожая ситуация — переполнение буфера (англ. buffer overflow). Она происходит, когда записываемое значение больше выделенной области в памяти.

Обратите внимание, что мы получили предупреждение об арифметическом переполнении (англ. integer overflow):

что такое ошибка в программе. 18563129062020 7b64da46b2dc4329c15be64aeef9e636261e678c. что такое ошибка в программе фото. что такое ошибка в программе-18563129062020 7b64da46b2dc4329c15be64aeef9e636261e678c. картинка что такое ошибка в программе. картинка 18563129062020 7b64da46b2dc4329c15be64aeef9e636261e678c. Разбираемся, какие бывают типы ошибок в программировании и как с ними справляться.

Тем не менее программа скомпилировалась. Если же такая ситуация возникнет во время вычислений, то мы можем не получить предупреждения.

Арифметическое переполнение стало причиной одной из самых дорогих аварий, произошедших из-за ошибки в коде. В 1996 году ракета-носитель «Ариан-5» взорвалась на 40-й секунде полёта — потери оценивают в 360–500 миллионов долларов.

Как избежать всех этих ошибок

К сожалению, вручную всё это заметить и исправить не получится. Однако существуют различные инструменты и технологии, которые могут помочь.

Один из таких инструментов — отладчик. Он помогает контролировать ход работы программы, чтобы отслеживать разные показатели.

Второй, более эффективный метод — unit-тесты. Они представляют из себя набор описанных ситуаций для каждого компонента программы с указанием ожидаемого поведения.

Например, у вас есть функция sum (int a, int b), которая возвращает сумму двух чисел. Вы можете написать unit-тесты, чтобы проверять следующие ситуации:

Если какой-то из этих тестов не пройден, вы узнаете об этом и сможете всё исправить. Это намного быстрее, чем проверять всё вручную.

Заключение

Ошибок существует слишком много. При этом самые опасные тяжелее обнаружить, что только усугубляет ситуацию.

Если вы хотите научиться писать качественный код и находить в нём ошибки, вы можете записаться на наш курс по разработке на C++.

Источник

Определение понятия «ошибка в программе»

что такое ошибка в программе. dark fb.4725bc4eebdb65ca23e89e212ea8a0ea. что такое ошибка в программе фото. что такое ошибка в программе-dark fb.4725bc4eebdb65ca23e89e212ea8a0ea. картинка что такое ошибка в программе. картинка dark fb.4725bc4eebdb65ca23e89e212ea8a0ea. Разбираемся, какие бывают типы ошибок в программировании и как с ними справляться. что такое ошибка в программе. dark vk.71a586ff1b2903f7f61b0a284beb079f. что такое ошибка в программе фото. что такое ошибка в программе-dark vk.71a586ff1b2903f7f61b0a284beb079f. картинка что такое ошибка в программе. картинка dark vk.71a586ff1b2903f7f61b0a284beb079f. Разбираемся, какие бывают типы ошибок в программировании и как с ними справляться. что такое ошибка в программе. dark twitter.51e15b08a51bdf794f88684782916cc0. что такое ошибка в программе фото. что такое ошибка в программе-dark twitter.51e15b08a51bdf794f88684782916cc0. картинка что такое ошибка в программе. картинка dark twitter.51e15b08a51bdf794f88684782916cc0. Разбираемся, какие бывают типы ошибок в программировании и как с ними справляться. что такое ошибка в программе. dark odnoklas.810a90026299a2be30475bf15c20af5b. что такое ошибка в программе фото. что такое ошибка в программе-dark odnoklas.810a90026299a2be30475bf15c20af5b. картинка что такое ошибка в программе. картинка dark odnoklas.810a90026299a2be30475bf15c20af5b. Разбираемся, какие бывают типы ошибок в программировании и как с ними справляться.

что такое ошибка в программе. caret left.c509a6ae019403bf80f96bff00cd87cd. что такое ошибка в программе фото. что такое ошибка в программе-caret left.c509a6ae019403bf80f96bff00cd87cd. картинка что такое ошибка в программе. картинка caret left.c509a6ae019403bf80f96bff00cd87cd. Разбираемся, какие бывают типы ошибок в программировании и как с ними справляться.

что такое ошибка в программе. caret right.6696d877b5de329b9afe170140b9f935. что такое ошибка в программе фото. что такое ошибка в программе-caret right.6696d877b5de329b9afe170140b9f935. картинка что такое ошибка в программе. картинка caret right.6696d877b5de329b9afe170140b9f935. Разбираемся, какие бывают типы ошибок в программировании и как с ними справляться.

К вопросу о классификации программных ошибок

Определение понятия «ошибка в программе». 1

Классификация ошибок по месту их возникновения. 2

Классификация ошибок с точки зрения тестировщика. 12

Классификация ошибок по степени их критичности. 13

Классификация ошибок в зависимости от их места в жизненном цикле программного изделия 14

Классификация программных ошибок (багов) с точки зрения субъективного восприятия их программистами. 15

Некоторые выводы.. 16

В качестве введения рассмотрим определения понятия «ошибка». Начнем с наиболее общего трактования этого понятия применительно к некоторым техническим системам.

По определению стандарта ISO 9241-13 [1] ошибка это – несоответствие между целями пользователя и ответом системы.

Определение, приведенное в работе [2], предполагает, что ошибка вызвана не сложностью задачи, а сложностью орудия (напр., компьютерной системы), поэтому она является не ошибкой пользователя, а ошибкой разработчиков этого орудия.

Далее рассмотрим более частные определения, непосредственно связанные с компьютерными программами.

Определение понятия «ошибка в программе»

В самом общем случае под ошибкой понимается какой-то сбой в программе на этапе ее выполнения.

Ошибкой (или так называемым багом) можно назвать недокументированные или нежелательные, «побочные» реакции программы на те или иные действия пользователя равно как и при использовании ее одновременно с другим программами или на другой аппаратной платформе.

Майерс дает такое нестрогое определение: «Если программа не делает того, чего пользователь от нее вполне обосновано ожидает, значит налицо программная ошибка» [3].

Источник

Программист и ошибки — актуально во все времена

Годы бегут, компьютеры становятся мощнее, листинги программ длиннее, а программисты всё ещё допускают те же самые ошибки (или же сталкиваются с ними)… Предлагаю разобраться с основными типами ошибок и причинами, по которым они происходят

Чтобы максимально раскрыть смысл фразы «актуально во все времена«, в качестве иллюстрирующих примеров будут приведены сведения времён старой доброй DOS 🙂, поэтому материал рекомендуется к прочтению любителям ностальгии

Какие же бывают типы ошибок?

Тип №1. Ошибки в программном комплексе, допущенные при разработке и не обнаруженные при его тестировании

• В «Справочнике Microsoft Works» и интерактивной помощи пакета интегрированной обработки информации Works 2.0 функция ЕСЛИ описана как
ЕСЛИ (Условие, ЗначениеЛожь, ЗначениеИстина)
Однако в действительности работа данной функции должна иметь следующий вид:
ЕСЛИ (Условие, ЗначениеИстина, ЗначениеЛожь)

В «Руководстве пользователя Microsoft Works для Windows» пакета Works 3.0 эта ошибка исправлена 🙂

• В русифицированном варианте Norton Utilities (версия 7.0, фирма Symantec) в утилите форматирования sformat при задании опции:
Системные файлы: [Не ставить…]
при форматировании выдаётся сообщение:
Системные файлы: Ставить
и наоборот, при задании опции:
Системные файлы: [Ставить…]
при форматировании выдаётся сообщение:
Системные файлы: Не ставить

• Неудача при запуске первого американского спутника к Венере случилась, вероятнее всего, из-за ошибки в программе – вместо требуемой в операторе запятой программист поставил точку. Вот как был записан этот оператор:
DO 50 I = 12.525
На самом же деле он должен был выглядеть следующим образом:
DO 50 I = 12,525
В программе на Фортране IV требовался цикл, а программист поставил точку, а в результате получилось присваивание значения 12,525 неявной переменной DO50I (пробелы в Фортране игнорируются) [ Спасибо за этот ценный комментарий-поправку хабраюзеру rexxer2 ]

• Потеря связи с космической станцией «Фобос-1» (СССР) произошла из-за ошибочной команды, переданной с Земли на бортовой компьютер.

• Причиной осложнений, возникших при возвращении на Землю из космической экспедиции советско-афганского и советско-французского экипажей, явились ошибки, допущенные в программном обеспечении бортовых компьютеров.

К данному типу относятся ошибки в алгоритмах, когда алгоритм неверный или создан на основе неправильных представлений о действительности:

• Одна из первых компьютерных систем противовоздушной обороны США (60-е годы) в первое же дежурство подняла тревогу, приняв восходящую из-за горизонта Луну за вражескую ракету, поскольку этот «объект» приближался к территории США и не подавал сигналов, что он «свой» 🙂

Тип №2. Ошибки, возникающие при вводе в компьютер неверных данных

Весьма популярные ошибки, предотвращение которых известно под названием «защита от дурака»

• В 1983 году произошло наводнение в юго-западной части США. Причина заключалась в том, что в компьютер были введены неверные данные о погоде, в результате чего он дал ошибочный сигнал шлюзам, перекрывающим реку Колорадо.

• Ещё один печальный пример: в восьмидесятые годы прошлого века в Антарктиде разбился самолёт с туристами на борту, поскольку в управляющую полётом систему были заложены неверные координаты аэропорта взлёта и система ошибочно рассчитала высоту полёта над горами

Тип 3. Компьютерные вирусы, «вмешивающиеся» в работу компьютера и выполняемую им программу.

• Летом 1988 года в Мичиганском госпитале компьютерный вирус инфицировал три компьютера, которые обрабатывали информацию о пациентах. Вирус перемешал фамилии пациентов в базе данных. В результате данного «вмешательства» диагностические сведения одних пациентов оказались приписанными другим пациентам.

Тип 4. Выход из строя элементов компьютера и обслуживающих его систем

Тут, в принципе, всё обстоит точно так же, как и 20 лет назад: в процессе эксплуатации компьютерной системы возможно физическое повреждение накопителя, выход из строя блока питания, отключение электроэнергии, колебание напряжения в электрической сети и др. Результатом такого рода неисправностей может быть полная потеря информации, хранящейся на жёстком диске, частичная или полная потеря информации в файлах баз данных, нарушение работы систем, управляемых компьютером и многое другое. Для предотвращения ошибок данного типа используют системы, в которых одновременно работают несколько компьютеров, дублирующих друг друга, в компьютеры устанавливают два и более параллельно работающих накопителя (вспоминаем RAID-массивы), аппаратуру подключают к источникам бесперебойного питания, которые обеспечивают его работу при отключении электроэнергии или колебаниях напряжения электрической сети и т.д. и т.п.

Тип №5. Выход из строя или сбои в работе измерительных приборов и датчиков, используемых при управлении какими-либо техническими системами и технологическими процессами

• В июле 1985 года произошло преждевременное отключение компьютера одного из основных двигателей американского космического корабля «Челленджер» (Шаттл), едва не закончившееся катастрофой. Положение спас командир корабля, сумевший на двух работающих основных двигателях и двух менее мощных двигателях для маневрирования вывести «Челленджер» на орбиту. Причина же заключалась в том, что один из трёх бортовых компьютеров, управляющих двигателями (на каждый двигатель по компьютеру), был «обманут» вышедшим из строя датчиком, измеряющим температуру газа в двигателе. Для устранения подобных неполадок в будущем на следующих космических кораблях серии Шаттл были установлены датчики изменённой конструкции.

• При запуске французской ракеты нового поколения «Ариан-5» примерно на 37-й секунде полёта компьютер, находившийся на борту ракеты, получил от датчиков системы управления неверную информацию о пространственной ориентации ракеты. Исходя из этой информации, компьютер начал корректировать траекторию полёта для того, чтобы компенсировать не существующую на самом деле погрешность. Ракета стала отклоняться от курса, что привело к возрастанию нагрузок на её корпус. В результате чрезмерных нагрузок верхняя часть ракеты отвалилась, и по команде с земли ракета была взорвана.

Тип 6. «Злая воля человека», носителем которой чаще всего выступает либо программист, либо оператор

Программист, создавая программу, может специально внести в неё ошибку 🙂. Другим вариантом проявления «злой воли программиста» является включение в программу «логической бомбы», срабатывающей, например, после определённого числа запусков программы, определённых значениях входных данных и др. Оператор, обслуживающий компьютер, может сознательно ввести в компьютер неверные данные, которые и будут обработаны компьютером, выдавая неверные выходные данные в соответствии с принципом «мусор на входе – мусор на выходе».

• Сборочный конвейер волжского автомобильного завода в городе Тольятти работает под управлением АСУ, которая обеспечивает своевременное поступление деталей на конвейер со складов и из цехов вспомогательных производств. Для выполнения этой задачи информационно-управляющая система хранит информацию о тысячах узлов и деталей, из которых собирается автомобиль, о запасах деталей на складах, об их движении по транспортным линиям и т. д. На основе этой информации АСУ самостоятельно управляет автоматизированными складами, транспортными конвейерами, а также рядом других устройств.
Программист, разрабатывавший программное обеспечение для управления главным конвейером Волжского автозавода, сознательно внёс в программу «логическую бомбу» в знак протеста против низкой зарплаты. Через некоторое время эта «логическая бомба» сработала, и главный конвейер остановился на несколько дней. Ущерб от остановки составил 1 миллион рублей (в ценах 80-х годов), этот ущерб был несопоставим с зарплатой всех программистов ВАЗа, вместе взятых, а программист был дисквалифицирован и переведён в рабочие.

Подводим итоги

Надеюсь, данный материал окажется полезным. Желаю всем делать поменьше ошибок, ведь это особенно актуально в нынешние кризисные времена :^)

PS: сведения предоставляются по данным из этих источников, множество важных дополнений и опровержений представлены ниже в комментариях, особенно от хабраюзера scoon. Однако оригинальный текст не изменяю

Источник

Последовательность поиска ошибки в программе ПЛК

Введение

Достаточно часто в литературе мне попадались описания ошибок и даже классификации их по типам.
Хотя, признаться, у меня не получается толком вспомнить ни одного случая, когда мне бы помогло знание того, к какому именно типу относится конкретная ошибка. Разве что уже после выяснения причин, для обьяснения их окружающим.
А вот как люди вычисляли место и докапывались до сути ошибки — мне всегда было интересно.

Сведения о системе и ошибке

С компьютера на ПЛК подаются уставки (времена, флаги режимов) и команды на устройство.
Из ПЛК на компьютер выдаются сигналы статуса устройства и времени до конца команды на это устройство. Сигналы пакуются в слова, для минимизации объемов приема и передачи.
Из ПЛК на устройство выдаются команды.
Устройство выдает на ПЛК свои статусы.

что такое ошибка в программе. image loader. что такое ошибка в программе фото. что такое ошибка в программе-image loader. картинка что такое ошибка в программе. картинка image loader. Разбираемся, какие бывают типы ошибок в программировании и как с ними справляться.

Изначально все работало, но через какое-то время при подаче команд, статусы на компьютере в SCADA начали моргать не по делу и вообще вести себя крайне недружелюбно. Причем только в одном месте, на одном объекте.

Но «танцы с саблями» появлялись стабильно, при каждой команде, что очень порадовало.

Поиск

Цифрами в круглых скобках показаны места проверок, соответствующие цифрам на схеме ниже.

Принципов и зависимостей моргания понять сходу не удается. Возможно из-за усталости, возможно по причине отсутствия таковых.

Было установлено, что ошибка присутствует не только в SCADA (1) (там, где она собственно была обнаружена), но и в OPC сервере (2).

Дальнейший разбор показал, что ошибка присутствует и в ПЛК, как минимум в слове, формируемом для компьютера (3).

Проверка наличия ошибки в статусе, приходящем от устройства – отметает устройство, как возможный источник проблемы.

Изменения статуса от устройства вручную ничего не меняют. При изменении статуса от устройства форсированием (принудительно, постоянно) ошибка все равно сохраняется.
Соответственно это и не импульсы, которых не видно при мониторинге (4).

Сравнение с кодами других объектов, на которых этой ошибки нет – различий не выдает. Полная идентичность. Вероятность ошибки в программе ПЛК уменьшается (5).

Отключается компьютер, как возможный источник ошибки, записывающий что-то в данную область памяти. Ошибка сохраняется. Вероятность ошибки из-за компьютера стремится к нулю. Соответственно, не смотря ни на что, проблема все-таки в ПЛК (6).

Ремарка: Также можно было, отключив ПЛК, руками менять статусы в OPC. Но такой вариант был сложнее технически, а в целом эти две проверки практически равнозначны.

Перенесение слова статуса, передаваемого из ПЛК на компьютер, в другую область памяти ПЛК ничего не дает. Ошибка сохраняется.

Перенесение куска кода с ошибкой в другой блок (условно функцию) тоже не влияет на ошибку. Соответственно вероятность того, что это влияет какая-то еще посторонняя команда, пишущая туда-же что-то свое – незначительна. Дело в этом куске.

что такое ошибка в программе. image loader. что такое ошибка в программе фото. что такое ошибка в программе-image loader. картинка что такое ошибка в программе. картинка image loader. Разбираемся, какие бывают типы ошибок в программировании и как с ними справляться.

Удаляется таймер. Команда не сбрасывается, но ошибка пропадает и статусы перестают прыгать.

Взамен вставляется новый таймер. Тщательно осматривается на предмет нелепостей. Таймер самый заурядный, ничего необычного. Таких в программе еще штук 200. Но ошибка появляется (8)

Вроде ничего необычного, причем полностью идентичная система работает с десятками идентичных устройств вокруг. Мозг скрипит и отказывается помогать.

что такое ошибка в программе. image loader. что такое ошибка в программе фото. что такое ошибка в программе-image loader. картинка что такое ошибка в программе. картинка image loader. Разбираемся, какие бывают типы ошибок в программировании и как с ними справляться.

После разбора — ситуация становится окончательно понятной.

Причина ошибки:

Операторы увеличили стандартное время таймаута с 1,5 до 10 минут.
И если 1,5 минуты это 90 секунд, то 10 минут это 600 секунд.
600 секунд не влезали в младший байт (максимум 256), и часть времени писалась в старший.

Суть последней проверки:

При записи сначала времени, и лишь затем статуса – статус забивал биты переполнения, приходившие от значения времени. А при обратной последовательности команд, время наоборот забивало своими битами статус.

Решение:

Время и статусы были разбиты на 2 слова. Местным инженерам было предложено провести техобслуживание или заменить устройство с таймаутом, превышающим стандартное время более чем в 5 раз.

И они работали они долго и счастливо, и сломались в один день.

Выводы

Описанная ошибка не особо сложна, но по-моему довольно симпатична с точки зрения показательности.

По сути не очень важно, где именно ищется ошибка — в электронике, в ПЛК, на компьютере или где-то еще. Общие принципы всегда примерно одинаковы:

Хотя разумеется рецепты для одних ситуаций могут быть совершенно бесполезны по отношению другим.
Но у всех ошибок есть конкретная причина, и эту причину всегда можно выяснить.
Например как-то причиной был тракторист с бороной, проехавшийся над кабелем. И хотя сложностей в ее устранении не возникло, их хватило в процессе написания рекомендации, для избежания повторов…

Извиняюсь за вероятную сложность чтения.
Тема не очень художественная, плюс к этому попытался сократить, пропуская не очень существенные моменты, вроде вынужденного отказа от BreakPoint’ов, из-за цикличности выполнения программы в ПЛК и наличия таймера.

Источник

Что такое исключения в программировании

Рассказ об ошибках, которые можно предусмотреть заранее.

Большинство наших проектов устроены так: когда во время работы программы возникает какая-то ошибка, то программа аварийно завершается. Иногда при этом она выдаёт сообщение об ошибке. Кажется, что это нормальная ситуация, но на самом деле большинство ошибок можно предусмотреть и научить программу правильно с ними работать. Для этого нам нужны обработчики ошибок.

Что такое обработчик ошибок

Чтобы программа знала, что делать, если возникла какая-то ошибка, используют обработчики исключительных ситуаций, или, проще говоря, обработчики исключений. Смысл такой:

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

Пример программы без обработчика исключений

Допустим, у нас в программе на Python предусмотрено чтение данных из файла и есть такой код:

Но если на диске этого файла не будет, то компьютер, когда дойдёт до этой строчки, выдаст ошибку:

что такое ошибка в программе. image2 2. что такое ошибка в программе фото. что такое ошибка в программе-image2 2. картинка что такое ошибка в программе. картинка image2 2. Разбираемся, какие бывают типы ошибок в программировании и как с ними справляться.

Давайте нарисуем это в виде простой схемы:

что такое ошибка в программе. 1 5. что такое ошибка в программе фото. что такое ошибка в программе-1 5. картинка что такое ошибка в программе. картинка 1 5. Разбираемся, какие бывают типы ошибок в программировании и как с ними справляться.

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

Программа с обработчиком исключений

Если мы знаем, что в каком-то месте возможна ошибка, то можем тогда предусмотреть этот сценарий и подстраховаться. Для этого используют обработчик и делают так:

В этой ситуации программа не зависнет и не вывалится с ошибкой, а сама сможет её обработать и делать дальше то, что нужно:

что такое ошибка в программе. 2 2. что такое ошибка в программе фото. что такое ошибка в программе-2 2. картинка что такое ошибка в программе. картинка 2 2. Разбираемся, какие бывают типы ошибок в программировании и как с ними справляться.

Команда try — это начало нашего обработчика исключений. Она говорит компьютеру: «Попробуй выполнить вот эту команду, а мы посмотрим, что произойдёт».

Except — это какую ошибку мы ожидаем здесь увидеть. В нашем случае мы хотим предусмотреть случай, что такого файла нет, поэтому пишем стандартную ошибку для такой ситуации.

👉 Сравните текст этой ошибки с тем, что нам выдал компьютер в предыдущем разделе.

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

Когда что-то не предусмотрено — будет ошибка

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

Во всех этих случаях программа сломается, потому что мы не предусмотрели эти ситуации:

что такое ошибка в программе. 3. что такое ошибка в программе фото. что такое ошибка в программе-3. картинка что такое ошибка в программе. картинка 3. Разбираемся, какие бывают типы ошибок в программировании и как с ними справляться.

Получается, всё нужно делать с обработкой исключений?

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *