- Автор: Роман Савоченко
Отладке и тестированию OpenSCADA уделяется значительное время разработчиков, однако в виду ограниченности ресурсов и практической невозможности охватить все варианты конфигурации и исполнения OpenSCADA, ошибки могут проявляться как в виде невыполнения отдельных функций, некорректности их выполнения и даже аварийного завершения программы у пользователей. Понимание этого со стороны пользователя очень важно и от него требуется добрая воля и некоторое время на подготовку отчёта о проблеме, с целью её последующего устранения разработчиками.
Contents
1 Условия и варианты отчётности
Сообщить про ошибку в программе может каждый, для её рассмотрения разработчиками на общих основаниях свободной технической поддержки, за рамками договора коммерческой технической поддержки или выполнения работ этого пользователя. Но будут рассмотрены разработчиками только ошибки, которые являются ошибками непосредственно OpenSCADA, не являются проблемами окружения и внешних библиотек и воспроизводятся у разработчика на демонстрационных конфигурациях последних версий OpenSCADA и присутствующем оборудовании проекта OpenSCADA!
Основным и единственным официальным местом сообщения про ошибки на общих основаниях свободной технической поддержки является раздел форума "Отслеживание ошибок", где разработчики гарантировано дадут на них ответ. Если Вы не уверены, что эта ошибка непосредственно OpenSCADA, тогда лучше напишите сообщение про неё в другом разделе форума OpenSCADA, где никаких гарантий ответа не предоставляется. Иначе, после трёх подряд некорректных сообщений про ошибку, Вас будет отключено от форума за злостное получение технической поддержки и консультаций, бесплодно расходуя таким образом время разработчиков! Правила уведомления про ошибки детально изложены здесь.
Перед формированием отчёта про ошибку на общих основаниях свободной технической поддержки, нужно на странице меток форума ознакомиться с перечнем известных ошибок:
- подтверждённых-открытых и решаемых на данный момент — "BugConfirmed";
- которые на данный момент требуют обратной связи от автора — "BugNeedFeedBack";
- окружения исполнения и специфические к пользователю — "BugEnvironment";
- некорректных уведомлений — "BugWrong".
Сообщения про ошибки в программе, на основании коммерческой технической поддержки или выполнения работ пользователя, можно осуществить в такие способы, согласно приоритету разработчика:
- в разделе форума "Техническая поддержка", который появляется и доступен для зарегистрированных пользователей, которые имеют активный пакет технической поддержки;
- электронной почтой на адрес service at oscada.org;
- непосредственно электронной почтой, сервисом мгновенных сообщений и звонков, или телефоном разработчика, а также приватным сообщением форума (для зарегистрированных пользователей).
2 Требования к отчёту про ошибку
Для исключения лишних наводящих вопросов, или даже преждевременного закрытия ошибки статусом "Не ошибка", и для ускорения процесса локализации проблемы рекомендуется следовать следующим требованиям к отчёту:
- Указать окружение исполнения OpenSCADA, а именно: дистрибутив и версию операционной системы.
- Указать версию OpenSCADA, включая SVN-ревизию рабочей ветви.
- Указать особенности конфигурации и исполнения.
В случае свободной поддержки обязательным является воспроизведение проблемы в стандартных конфигурациях и на демонстрационной БД, особенно если это аварийное завершение программы и невозможно сформировать отчёт про падение или он оказывается непоказательным.
- Описать действия, которые вызывают ошибку.
- Вложить протокол сообщений OpenSCADA для сеансу с воспроизведением ошибки.
- Сформировать отчёт про аварийное завершение программы — разворот стека исполнения на момент аварийного завершения.
- отчёт обычно формируется автоматически, путём генерации его из предсмертного дампа памяти программы; на предмет включения генерации дампа памяти и ручной генерации отчёта из него читайте в следующем разделе;
- при проблемах, связанных с зависанием-блокированием одной или нескольких задач-потоков OpenSCADA, для их локализации может быть полезным ручное прерывание программы сигналом "SIGSEGV", что вызовет формирование предсмертного дампу и отчёт про падение с информацией про место зависания;
- для значительного увеличения пользы разворота стека Вы должны добавить отладочную информацию, установкой опции "-g" во время компиляции, или установить готовый отладочный пакет openscada-dbg.
3 Получение файла предсмертного дампа и его обработка
Во время аварийного завершения программы ядро ОС Linux может формировать предсмертный дамп памяти программы. С помощью этого дампа часто можно выявить место в программе, которое вызвало аварийную остановку. Для включения возможности генерации ядром Linux предсмертного дампа памяти программы нужно выполнить команды:
# Проверка возможности генерации дампов памяти
# Указывает "core", если включена
cat /proc/sys/kernel/core_pattern
# Включение генерации дампов памяти
echo "core" > /proc/sys/kernel/core_pattern
После этого нужно снять ограничение на размер генерируемого файла дампа. Это ограничение, по умолчанию, в OpenSCADA снято и устанавливается оно аргументом командной строки --noCoreDump. Снять это ограничение, на уровне операционной системы, можно исполнив, перед вызовом OpenSCADA, специальную команду ulimit -c unlimited.
Затем нужно убедиться в том, что пользователь, который запускает OpenSCADA, имеет право записи в рабочую директорию OpenSCADA, что в последних версиях OpenSCADA является обязательным и обеспечивается менеджером проектов OpenSCADA.
Далее запускается OpenSCADA и воспроизводится аварийное завершение, в результате которого, в рабочей директории OpenSCADA, создаётся файл "core".
Последние версии OpenSCADA обеспечивают автоматическую генерацию отчёта про аварийное завершения, при наличии файла предсмертного дампу "core" и отладчика gdb, и это осуществляется в начале запуска OpenSCADA. Файлы отчётов про аварийное завершение получают название вида "AGLKS_core_2018-02-16_22.06.crash" и накапливаются в рабочей директории соответствующего проекта OpenSCADA.
Если файл дампа памяти "core" сформировался, а отчёт про аварийное завершение автоматически не генерируется, то вероятно не установлен отладчик gdb. В таком случае Вы должны его установить и вызвать:
- сервисную процедуру менеджера проектов OpenSCADA:
- openscada-proj proc {ProjName}
- или команду прямого вызова отладчика, из рабочей папки проекта:
- gdb openscada --core core --batch --quiet -ex "thread apply all bt full" -ex "quit" > {ProjName}_core_$(date +%F_%H:%M).crash
- или прямую процедуру отладчика в интерактивном режиме, через вызов gdb без аргументов:
# Переход в рабочий каталог проекта OpenSCADA
(gdb) cd /var/spool/openscada/{ProjName}
(gdb) cd ~/.openscada/{ProjName}
# Указание исполняемого файла
(gdb) file /usr/bin/openscada
# Указание файла дампа памяти программы
(gdb) core-file ./core.26658
# Получение разворота стека исполнения — отчёта об аварийном завершении
(gdb) thread apply all bt full
#0 0xb7d104c0 in pthread_cancel () from /lib/librt.so.1
#1 0xb7d1edaa in start_thread () from /lib/libpthread.so.0
#2 0xb7dfcf5e in clone () from /lib/libc.so.6