|
Unknown error. Че делать?
|
|||
---|---|---|---|
#18+
Имеем ПО с С-API. ПО вы не знаете, оно далеко не массовое и доступно только покупателям. Через С-API присоединяем к ПО свою DLL. Любители кодов могут не беспокоится, их не будет - коды ДЛЛ весят ~90КБ. Вопрос о принципах, а не о кодах. Умение кодировать здесь не пригодится.)) Все работает, ДЛЛ получает однотипный поток данных и их обрабатывает, все прекрасно. Есть одно но, программа иногда выдает Unknown error по взаимодействию с ДЛЛ. При этом может повиснуть, может не повиснуть и продолжить работу, может вообще закрыться. Это может случиться в любой момент - может произойти через 15мин после запуска, а может и весь день работать без сбоев. Иногда сбои происходят чуть-ли не регулярно. Какие-то явные причины их появления отсутствуют. Непредсказуемо. Надо сказать, что ПО и само особой стабильностью не отличается, но ДЛЛ явно усугубляет эту нестабильность. Теперь, что делается. Увожу обработку в ДЛЛ в потоки, чтобы освободить вызывающие потоки ПО. Ну, м.б чуть лучше стало, но не более. Вопрос, собственно, о методах борьбы с такими вот непонятками, ну, и что еще можно предпринять кроме распараллеливания. Ну, а задача, максимально устранить влияние ДЛЛ на нестабильность самого ПО - она есть, но в разумных пределах. "Есть многое на свете, друг Горацио, что и не сразу в голову придет." М. Твен "Приключения Геккельбери Финна" ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2019, 02:00 |
|
Unknown error. Че делать?
|
|||
---|---|---|---|
#18+
YUBAЛюбители кодов могут не беспокоится, их не будетна нет - суда нет Ищите баги ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2019, 04:26 |
|
Unknown error. Че делать?
|
|||
---|---|---|---|
#18+
YUBAИногда сбои происходят чуть-ли не регулярно. Какие-то явные причины их появления отсутствуют. Непредсказуемо. Надо сказать, что ПО и само особой стабильностью не отличается, но ДЛЛ явно усугубляет эту нестабильность. 1. Неправильное распараллеливание. Потоконебезопасный код иногда выполняется в нескольких потоках. Это может быть как код внутри DLL, так и твой код, который делает распараллеливание. Для проверки убрать распараллеливание. 2. Возможно где-то происходит переполнение и портится память используемая DLL. Такое устанешь ловить, т.к. проблема в одном месте, а глючит совсем в другом. 3. Пиши подробные логи обращения к DLL, возможно повторив цепочку 2-5 вызовов удастся добиться стабильного повторения проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2019, 07:19 |
|
Unknown error. Че делать?
|
|||
---|---|---|---|
#18+
YUBA, Выше все сказали. Добавлю. - потоки нужно вообще все убрать. И проверить стабильность. Странно что вы потоки хотите включаете, хотите нет). Так не бывает. Код разный. - Стек ошибки где? Неужели не ловится через try и в стеке пусто? - зависание почему не отловили? Это ведь проще всего. .. По практике, нужно просто Самому сесть на пару дней и искать ошибку. Не передоверяя другим. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2019, 07:43 |
|
Unknown error. Че делать?
|
|||
---|---|---|---|
#18+
YUBA, я так понял ваша DLL загружается из чужого exe-шника, кодов которого у вас нет. Сделайте свой аналог этого exe-шника, который вы будете контролировать, пусть он вызывает вашу DLL ананлогично тому как это делает ПО. Если ошибок нет - вина ПО, а не вашей DLL. А если есть, сможете отлаживать. YUBAПри этом может повиснуть, может не повиснуть и продолжить работу, может вообще закрыться. Это может случиться в любой момент - может произойти через 15мин после запуска, а может и весь день работать без сбоев. Иногда сбои происходят чуть-ли не регулярно. Какие-то явные причины их появления отсутствуют. Непредсказуемо. Знакомое поведение, бывает похоже с плагином к AutoCAD. Бывает, работает довольно долго ок. Потом отойдешь от компа минут на 10, подойдешь обратно, мышкой поводишь или нажмешь - упало. Ни одна операция плагина не запрашивалась. А что он там внутри себя оптимизировал в эти 10 минут - неизвестно. Еще вариант, где-то кто-то привел к ситуации с Undefined Behaviour. Тоже вот непонятно, почему оно допускается стандартом. Получается, отлаживать это надо на теоретических знаниях. Выглядит как расчет на идеальных людей, которых на практике нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2019, 11:07 |
|
Unknown error. Че делать?
|
|||
---|---|---|---|
#18+
По возможности отвечу на все посты сразу. О ПО, кроме C_API мы действительно знаем оч мало. Из диспетчера задач знаем, что в нем задействовано 16 потоков. Сколько из них взаимодействует с нашей ДЛЛ неизвестно. Кстати, как это узнать? С ДЛЛ возможно два вида взаимодействия: 1. Вызов функции ПО из ДЛЛ. 2. Вызов различных функций ДЛЛ по разным событиям в ПО. Сколько потоков обслуживают события - неизвестно. Известно, что до окончания обработки события, и освобождения его потока, функция ДЛЛ на аналогичное событие не может быть вызвана, и событие будет находиться в очереди. С другой стороны, функции обработки различных событий никак не пересекаются, а у общих переменных только один писатель и здесь конфликтов быть не должно. Изначально ДЛЛ писалась как однопоточная (в смысле создания потоков внутри самой ДЛЛ). Однако, уже изначально планировалось обработку событий вынести в отдельные потоки, чтобы как можно быстрей освободить поток ПО вызывающий функции ДЛЛ. Сейчас основная гипотеза следующая. С какого бодуна, функции тысячи раз отрабатывающие штатно, должны на однотипных данных отрабатывать неправильно и давать сбои. Стало быть, что-то не так с входными данными. Т.е., возможно переполнение очереди событий в самом ПО. Отсюда, необходимо минимизация времени обработки событий, уход в потоки и освобождения потока(ов) ПО вызывающего функции ДЛЛ. Сейчас реализовано только частично. Сегодня уже час работы, - все пока ОК. Но и раньше такое случалось, и поболе. Выводы делать рано. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2019, 16:29 |
|
Unknown error. Че делать?
|
|||
---|---|---|---|
#18+
YUBA, Извините, но ваш ответ не уточняет ответы ранее. Если ПО (экзешник?) в исходнике вам недоступен, то тут писали что делаете свой exe и тестите нагрузочным вашу dll. Логи+тесты+стек это стандарт работы с ошибками. Ничего нового. ... Ошибка перехватывается? В лог пишется перехват? Где виснет нашли? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2019, 16:46 |
|
Unknown error. Че делать?
|
|||
---|---|---|---|
#18+
PetroNotC SharpYUBA, Если ПО (экзешник?) в исходнике вам недоступен, то тут писали что делаете свой exe и тестите нагрузочным вашу dll. Нереально. И не рацо писать аналог ихнего C-API и имитатор данных к нему. И это, в итоге, будет совсем другое ПО.) При больших трудозатратах так мы ничего не выясним. ИМХО, на данном этапе единственная здравая идея - не грузить потоки ПО своей ДЛЛ. Взял данные - освободил поток ПО. Обработка уже в других потоках. Имхо, подобные задачи надо решать на системном уровне, а не на уровне - трясти надо. Обвесить все try и логами всегда успеется.) Скажем, сегодня сбоев вообще нет. Но это еще ничего не значит.)) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2019, 17:12 |
|
Unknown error. Че делать?
|
|||
---|---|---|---|
#18+
YUBAединственная здравая идея - не грузить потоки ПО своей ДЛЛ. Если код писали хорошо, то логирование уже есть. Неужели потоки вам проще чем ежедневная работа программиста - логи, try, debug. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2019, 17:18 |
|
Unknown error. Че делать?
|
|||
---|---|---|---|
#18+
YUBA, уволить рукамиводителя нахрен. это его косяк, что люди беграмотно пишут(из ваших объяснений это следует). если по технике. методом отсекания (банальное комментирование подойдёт) до основного скелета убираете весь код. можно поэтапно, можно делением пополам. поняв что улучшает-ухудшает сами находите причину либо выкладываете тут не рабочий экземпляр. по другому в реальном мире никак... есть ещё не реальный мир - то идёте к экстрасенсу, он указывает номер строки... (круглый) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2019, 19:14 |
|
Unknown error. Че делать?
|
|||
---|---|---|---|
#18+
kolobok0, Да. Деление пополам мой любимый метод.) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2019, 19:21 |
|
Unknown error. Че делать?
|
|||
---|---|---|---|
#18+
kolobok0идёте к экстрасенсу, он указывает номер строки...как пить дать, 17-ая)) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2019, 19:22 |
|
Unknown error. Че делать?
|
|||
---|---|---|---|
#18+
Кажется двигаюсь в правильном направлении. Сегодня ни одного сбоя, за исключением разрыва связи с источником данных. Это нормально, данные можно снимать только в установившемся режиме. Пока в потоки вынесены только две высоконагруженные задачи. Ну, и кусок лога. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2019, 19:55 |
|
Unknown error. Че делать?
|
|||
---|---|---|---|
#18+
PS этот id часа за 3 набрался после обнуления. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2019, 20:50 |
|
Unknown error. Че делать?
|
|||
---|---|---|---|
#18+
YUBAПо возможности отвечу на все посты сразу. О ПО, кроме C_API мы действительно знаем оч мало. Из диспетчера задач знаем, что в нем задействовано 16 потоков. Сколько из них взаимодействует с нашей ДЛЛ неизвестно. Кстати, как это узнать? Какая разница сколько потоков вызывает твою DLL? Достаточно знать что более одного. Для исключения проблем из-за многопоточности добавь мьютекс и блокируй его во всех функциях DLL Код: plaintext 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2019, 09:41 |
|
Unknown error. Че делать?
|
|||
---|---|---|---|
#18+
Dima T,, там нет проблем многопоточность, по крайней мере пока. В дальнейше могут появиться. Похоже, введение потоков на данном этапе все решило. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2019, 12:04 |
|
Unknown error. Че делать?
|
|||
---|---|---|---|
#18+
YUBADima T,, там нет проблем многопоточность, по крайней мере пока. В дальнейше могут появиться. Похоже, введение потоков на данном этапе все решило.ну решило и решило)). Значит можно не добавлять логи и не перехватывать ошибки до падения. Удачи! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2019, 12:47 |
|
|
start [/forum/topic.php?fid=57&fpage=11&tid=2017553]: |
0ms |
get settings: |
13ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
others: | 270ms |
total: | 420ms |
0 / 0 |