Всё пропало - всё упало.

Общие принципы, проектирование, модуляризация, темплейты и шаблоны
Ответить
Artem.spb

Activity Автор
professor
professor
Сообщения: 3393
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Всё пропало - всё упало.

Сообщение Artem.spb »

Вопрос довольно обширный: как отловить заразу, которая грохает всё.
Есть большой проект, в который намешано всё: очереди, события, акторы, dll разработки второй стороны и tcp-общение с сервером разработки третьей стороны.
И случается порой, что система просто грохается. А в последнее время всё чаще. И добавление новых функций только усугубляет положение.
Есть ли гуманные способы отловить виновного?
Execution trace молчит, просто говорит: "мы его потеряли", ошибок в последний момент поймать не успевает.
Дампы создаютсЯ, но что с них толку? на форуме NI один ex-support делился тайной, что они сами в них не копались никогда.
Постепенно отключать по частям - не гуманный способ, но пока единственный, и пока не давший результат.
Большие подозрения на те самые dll, любят они всё обрушить, если им неправильный ноль подать, но явно это не единственная проблема.
И ещё печалька в том, что включить retain wire values в критических областях не получается - система без лишних раздумий падает сразу после запуска.
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

Re: Всё пропало - всё упало.

Сообщение Borjomy_1 »

Бить систему на независимые модули, изолировать процессы.
Artem.spb

Activity Автор
professor
professor
Сообщения: 3393
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: Всё пропало - всё упало.

Сообщение Artem.spb »

[quote=="Borjomy_1"]Бить систему на независимые модули, изолировать процессы.[/quote]
10 акторов 3 условно актора и 3 потока UI достаточная разбивка? :)
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Всё пропало - всё упало.

Сообщение dadreamer »

Посмотрите, в папке Temp при запуске создаётся текстовый файлик, типа лога, туда иногда кое что пишется при неполадках. Можно несколько расширить вывод, добавив в LabVIEW.ini следующее:
createLogFile=True
DPrintfLogging=True
DPrintfToFile=True
promoteDWarnInternals=True
Рядом с labview.exe после этого должен создасться файл DPrintf.txt, там будет отладочная инфа о внутренних вызовах. Поизучайте или скиньте этот файл сюда, может, как-то получится разобраться, в чём траблы.
Artem.spb

Activity Автор
professor
professor
Сообщения: 3393
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: Всё пропало - всё упало.

Сообщение Artem.spb »

Забыл написать про ещё один метод умирания: глубокая кома. При попытках дебага (пробниками) иногда уходит в глубочайшую задумчивость, из которой выход только один.
В приложении два лога такой комы из папки VL и лог из temp-a
Файл на саммо деле 7z (лучше жмёт)
Вложения
lv_log.zip
(4.58 КБ) 169 скачиваний
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Всё пропало - всё упало.

Сообщение dadreamer »

Особого криминала в логах не обнаружил. Кроме того, что :vi: из либы infoscope30-*.lvlib выполняют множество однотипных операций. Может, это и ничего, но не совсем стандартное поведение. Я бы в первую очередь отключил эту либу вместе со всем, чем она управляет, и прогнал бы программу. Если не поможет, можно пройти откладчиком: http://www.labviewportal.org/viewtopic. ... ec9#p65006 Ну, или по старинке, отлаживать поблочно. :) Виндовые логи также гляньте, вдруг там что интересное.
Artem.spb

Activity Автор
professor
professor
Сообщения: 3393
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: Всё пропало - всё упало.

Сообщение Artem.spb »

[quote=="dadreamer"]Особого криминала в логах не обнаружил. Кроме того, что :vi: из либы infoscope30-*.lvlib выполняют множество однотипных операций. Может, это и ничего, но не совсем стандартное поведение. [/quote]
Эта либа и есть основная часть программы и она в бесконечном беге с частотой 10 Гц получает данные с приёмника и отображает их на водопаде, параллельно классифицирую, декодируя, и иногда воспроизводя звук.
Так что делаение одного и тоге же там и задумано.
Или мы говорим про разные вещи.
Где эти операции записаны? я там ничего кроме "мы проигнорировали окно..." толком не увидел.
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

Re: Всё пропало - всё упало.

Сообщение Borjomy_1 »

Кстати, очереди и потоки выполняются в среде операционной системы. Т.е накладные расходы на работу с элементами очереди, нотификатора, семафора и прочими подобными элементами очень большие. Рассчитывайте на десятки и сотни микросекунд. Местами лучше обойтись другими способами. Насчет акторов - не знаю, не пользовал. Но тоже, обратите на накладные расходы там.
Ищите также места с интенсивным выделением и перераспределением памяти. Строки лучше заменять на байтовые массивы, причем везде, где можно.

Попробуйте понизить и повысить частоту опроса 10..100..1000мс и посмотрите разницу в поведении.
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Всё пропало - всё упало.

Сообщение dadreamer »

>> Где эти операции записаны? я там ничего кроме "мы проигнорировали окно..." толком не увидел.
Да, это. Похоже на то, что либа зарегистрировала собственный оконный обработчик и часто хочет что-то где-то перерисовать, но :labview: не позволяет. Не говорю, что это сразу же ошибка, подобное встречается в логах, но от силы 1-2 раза, а здесь довольно часто. Ну, если так и задумано, то пусть. :)

Утечек памяти со стороны :labview: я не увидел. Если бы были, то в логах было бы такое:
Free: totSize 0, maxSize 0, nBlocks 0
Allocated: totSize 21429520, maxSize 0
nPointers 0, nUnlockedHdls 0, nLockedHdls 0
И повторялось бы. Но может существовать утечка в DLL, если они "криво" написаны или к ним не правильно обращаются. Когда :labview: падает, я также проверяю корректность прототипов всех функций в CLFN в соответствии с доками. Где-то в 90% на Си и на :labview: пишут разные программисты и прототипы в обёртках не полностью совпадают с реальными. Встречал в абсолютно каждом тулките, приходилось править.
Artem.spb

Activity Автор
professor
professor
Сообщения: 3393
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: Всё пропало - всё упало.

Сообщение Artem.spb »

[quote=="dadreamer"]>> Где эти операции записаны? я там ничего кроме "мы проигнорировали окно..." толком не увидел.
Да, это. Похоже на то, что либа зарегистрировала собственный оконный обработчик и часто хочет что-то где-то перерисовать, но :labview: не позволяет.[/quote]

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

Activity Автор
professor
professor
Сообщения: 3393
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: Всё пропало - всё упало.

Сообщение Artem.spb »

we are ignoring the window(0x05948e58) passed to ICreatePixmap
начинается при открытии проекта, но до открытия любого vi или запуска его.
При создании пустого проекта и создании там нового vi такого не наблюдается.
Что же там такое рвётся наружу, а его не пускают?
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Всё пропало - всё упало.

Сообщение dadreamer »

Боюсь, что это вам самим придётся выяснить. Должно быть, в скобках хэндл окна (hwnd). Можно взять какой-нибудь вьювер окон типа WinSpy и посмотреть, что это за окно такое: http://www.manhunter.ru/underground/103 ... heniy.html Или заюзать встроенный в LV вьювер окон, хотя он не слишком удобный.
Вложения
Example_VI_BD.png
Example_VI_BD.png (8.8 КБ) 4950 просмотров
Artem.spb

Activity Автор
professor
professor
Сообщения: 3393
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: Всё пропало - всё упало.

Сообщение Artem.spb »

Тремя шпионами не смог найти такого хэндлер.
Вообще в списке нет окон 05... до есть одно-два 005, а обычно 001.. и меньше
А во всех случаях это игнорируемое окно с пяти начинается
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Всё пропало - всё упало.

Сообщение dadreamer »

Это для меня не менее странно, потому что при обычном открытии проекта ни :vi: сами собой не запускаются ( https://forums.ni.com/t5/LabVIEW-Idea-E ... anguage=en ), ни DLL-ки в память не загружаются. По идее нечему такой эффект вызывать. Может, какой-то баг :labview: , а может в чём-то другом проблема.
Ответить

Вернуться в «Модели программирования»