powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Unknown error. Че делать?
18 сообщений из 18, страница 1 из 1
Unknown error. Че делать?
    #39874370
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеем ПО с С-API. ПО вы не знаете, оно далеко не массовое и доступно только покупателям.
Через С-API присоединяем к ПО свою DLL. Любители кодов могут не беспокоится, их не будет - коды ДЛЛ весят ~90КБ. Вопрос о принципах, а не о кодах. Умение кодировать здесь не пригодится.))
Все работает, ДЛЛ получает однотипный поток данных и их обрабатывает, все прекрасно. Есть одно но, программа иногда выдает Unknown error по взаимодействию с ДЛЛ. При этом может повиснуть, может не повиснуть и продолжить работу, может вообще закрыться. Это может случиться в любой момент - может произойти через 15мин после запуска, а может и весь день работать без сбоев. Иногда сбои происходят чуть-ли не регулярно. Какие-то явные причины их появления отсутствуют. Непредсказуемо.
Надо сказать, что ПО и само особой стабильностью не отличается, но ДЛЛ явно усугубляет эту нестабильность.
Теперь, что делается. Увожу обработку в ДЛЛ в потоки, чтобы освободить вызывающие потоки ПО. Ну, м.б чуть лучше стало, но не более.
Вопрос, собственно, о методах борьбы с такими вот непонятками, ну, и что еще можно предпринять кроме распараллеливания. Ну, а задача, максимально устранить влияние ДЛЛ на нестабильность самого ПО - она есть, но в разумных пределах.

"Есть многое на свете, друг Горацио, что и не сразу в голову придет."
М. Твен "Приключения Геккельбери Финна"
...
Рейтинг: 0 / 0
Unknown error. Че делать?
    #39874371
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAЛюбители кодов могут не беспокоится, их не будетна нет - суда нет
Ищите баги
...
Рейтинг: 0 / 0
Unknown error. Че делать?
    #39874383
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAИногда сбои происходят чуть-ли не регулярно. Какие-то явные причины их появления отсутствуют. Непредсказуемо.
Надо сказать, что ПО и само особой стабильностью не отличается, но ДЛЛ явно усугубляет эту нестабильность.
1. Неправильное распараллеливание. Потоконебезопасный код иногда выполняется в нескольких потоках. Это может быть как код внутри DLL, так и твой код, который делает распараллеливание. Для проверки убрать распараллеливание.

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

3. Пиши подробные логи обращения к DLL, возможно повторив цепочку 2-5 вызовов удастся добиться стабильного повторения проблемы.
...
Рейтинг: 0 / 0
Unknown error. Че делать?
    #39874387
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBA,
Выше все сказали.
Добавлю.
- потоки нужно вообще все убрать. И проверить стабильность.
Странно что вы потоки хотите включаете, хотите нет). Так не бывает. Код разный.
- Стек ошибки где? Неужели не ловится через try и в стеке пусто?
- зависание почему не отловили? Это ведь проще всего.
..
По практике, нужно просто Самому сесть на пару дней и искать ошибку. Не передоверяя другим.
...
Рейтинг: 0 / 0
Unknown error. Че делать?
    #39874473
teo609
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YUBA,

я так понял ваша DLL загружается из чужого exe-шника, кодов которого у вас нет. Сделайте свой аналог этого exe-шника, который вы будете контролировать, пусть он вызывает вашу DLL ананлогично тому как это делает ПО. Если ошибок нет - вина ПО, а не вашей DLL. А если есть, сможете отлаживать.

YUBAПри этом может повиснуть, может не повиснуть и продолжить работу, может вообще закрыться. Это может случиться в любой момент - может произойти через 15мин после запуска, а может и весь день работать без сбоев. Иногда сбои происходят чуть-ли не регулярно. Какие-то явные причины их появления отсутствуют. Непредсказуемо.

Знакомое поведение, бывает похоже с плагином к AutoCAD. Бывает, работает довольно долго ок. Потом отойдешь от компа минут на 10, подойдешь обратно, мышкой поводишь или нажмешь - упало. Ни одна операция плагина не запрашивалась. А что он там внутри себя оптимизировал в эти 10 минут - неизвестно.

Еще вариант, где-то кто-то привел к ситуации с Undefined Behaviour. Тоже вот непонятно, почему оно допускается стандартом. Получается, отлаживать это надо на теоретических знаниях. Выглядит как расчет на идеальных людей, которых на практике нет.
...
Рейтинг: 0 / 0
Unknown error. Че делать?
    #39874733
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По возможности отвечу на все посты сразу.
О ПО, кроме C_API мы действительно знаем оч мало. Из диспетчера задач знаем, что в нем задействовано 16 потоков. Сколько из них взаимодействует с нашей ДЛЛ неизвестно. Кстати, как это узнать?
С ДЛЛ возможно два вида взаимодействия:
1. Вызов функции ПО из ДЛЛ.
2. Вызов различных функций ДЛЛ по разным событиям в ПО. Сколько потоков обслуживают события - неизвестно. Известно, что до окончания обработки события, и освобождения его потока, функция ДЛЛ на аналогичное событие не может быть вызвана, и событие будет находиться в очереди.
С другой стороны, функции обработки различных событий никак не пересекаются, а у общих переменных только один писатель и здесь конфликтов быть не должно.
Изначально ДЛЛ писалась как однопоточная (в смысле создания потоков внутри самой ДЛЛ). Однако, уже изначально планировалось обработку событий вынести в отдельные потоки, чтобы как можно быстрей освободить поток ПО вызывающий функции ДЛЛ.
Сейчас основная гипотеза следующая.
С какого бодуна, функции тысячи раз отрабатывающие штатно, должны на однотипных данных отрабатывать неправильно и давать сбои. Стало быть, что-то не так с входными данными. Т.е., возможно переполнение очереди событий в самом ПО.
Отсюда, необходимо минимизация времени обработки событий, уход в потоки и освобождения потока(ов) ПО вызывающего функции ДЛЛ. Сейчас реализовано только частично.
Сегодня уже час работы, - все пока ОК. Но и раньше такое случалось, и поболе. Выводы делать рано.
...
Рейтинг: 0 / 0
Unknown error. Че делать?
    #39874755
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBA,
Извините, но ваш ответ не уточняет ответы ранее.
Если ПО (экзешник?) в исходнике вам недоступен, то тут писали что делаете свой exe и тестите нагрузочным вашу dll.
Логи+тесты+стек это стандарт работы с ошибками. Ничего нового.
...
Ошибка перехватывается? В лог пишется перехват? Где виснет нашли?
...
Рейтинг: 0 / 0
Unknown error. Че делать?
    #39874779
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC SharpYUBA,
Если ПО (экзешник?) в исходнике вам недоступен, то тут писали что делаете свой exe и тестите нагрузочным вашу dll.
Нереально. И не рацо писать аналог ихнего C-API и имитатор данных к нему. И это, в итоге, будет совсем другое ПО.) При больших трудозатратах так мы ничего не выясним.
ИМХО, на данном этапе единственная здравая идея - не грузить потоки ПО своей ДЛЛ. Взял данные - освободил поток ПО. Обработка уже в других потоках.
Имхо, подобные задачи надо решать на системном уровне, а не на уровне - трясти надо. Обвесить все try и логами всегда успеется.)
Скажем, сегодня сбоев вообще нет. Но это еще ничего не значит.))
...
Рейтинг: 0 / 0
Unknown error. Че делать?
    #39874786
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAединственная здравая идея - не грузить потоки ПО своей ДЛЛ.
Если код писали хорошо, то логирование уже есть.
Неужели потоки вам проще чем ежедневная работа программиста - логи, try, debug.
...
Рейтинг: 0 / 0
Unknown error. Че делать?
    #39874872
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBA,

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

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

по другому в реальном мире никак...
есть ещё не реальный мир - то идёте к экстрасенсу, он указывает номер строки...

(круглый)
...
Рейтинг: 0 / 0
Unknown error. Че делать?
    #39874874
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0,
Да. Деление пополам мой любимый метод.)
...
Рейтинг: 0 / 0
Unknown error. Че делать?
    #39874875
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0идёте к экстрасенсу, он указывает номер строки...как пить дать, 17-ая))
...
Рейтинг: 0 / 0
Unknown error. Че делать?
    #39874898
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кажется двигаюсь в правильном направлении. Сегодня ни одного сбоя, за исключением разрыва связи с источником данных. Это нормально, данные можно снимать только в установившемся режиме. Пока в потоки вынесены только две высоконагруженные задачи.
Ну, и кусок лога.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
  id       dtime
212592	2019-10-10 19:45:40
212591	2019-10-10 19:45:39
212590	2019-10-10 19:45:39
212589	2019-10-10 19:45:40
212588	2019-10-10 19:45:38
212587	2019-10-10 19:45:34
212586	2019-10-10 19:45:34
212585	2019-10-10 19:45:31
212584	2019-10-10 19:45:31
212583	2019-10-10 19:45:30
212582	2019-10-10 19:45:29
212581	2019-10-10 19:45:29
212580	2019-10-10 19:45:29
212579	2019-10-10 19:45:24
212578	2019-10-10 19:45:24
...
Рейтинг: 0 / 0
Unknown error. Че делать?
    #39874915
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS этот id часа за 3 набрался после обнуления.
...
Рейтинг: 0 / 0
Unknown error. Че делать?
    #39874988
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAПо возможности отвечу на все посты сразу.
О ПО, кроме C_API мы действительно знаем оч мало. Из диспетчера задач знаем, что в нем задействовано 16 потоков. Сколько из них взаимодействует с нашей ДЛЛ неизвестно. Кстати, как это узнать?
Какая разница сколько потоков вызывает твою DLL? Достаточно знать что более одного.

Для исключения проблем из-за многопоточности добавь мьютекс и блокируй его во всех функциях DLL
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
std::mutex global_mtx;

// Функция DLL
void foo() {
     std::unique_lock<std::mutex> lck(global_mtx); // Блокировка
     ... 
}
...
Рейтинг: 0 / 0
Unknown error. Че делать?
    #39875091
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,, там нет проблем многопоточность, по крайней мере пока. В дальнейше могут появиться.
Похоже, введение потоков на данном этапе все решило.
...
Рейтинг: 0 / 0
Unknown error. Че делать?
    #39875134
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBADima T,, там нет проблем многопоточность, по крайней мере пока. В дальнейше могут появиться.
Похоже, введение потоков на данном этапе все решило.ну решило и решило)).
Значит можно не добавлять логи и не перехватывать ошибки до падения.
Удачи!
...
Рейтинг: 0 / 0
Unknown error. Че делать?
    #39875328
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

зато процесс!!!
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Unknown error. Че делать?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]