![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| V0fka |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 5.11.2006 Где: Украина Репутация: нет Всего: нет |
Привет!
Есть программа на WPF. Что она делает сейчас описывать не буду, т.к. мне кажется это для решения проблемы не важно. Периодически программа выкидывает исключение. Причину определить не могу и иногда месяцами работает без сбоев, а иногда вылетает по несколько раз в день. Пока было решено сделать костыль в виде отдельной программы, которая мониторит наличие соответствующего процесса и при его отсутствии - запускает нужный ехе-шник. Но уже после обнаружилась другая беда. Когда программа выкидывает исключение - процесс сходу не завершается. Сначала вываливается виндосовское окно, которое говорит о том, что где-то борода и сам процесс завершается только после того, как закроешь это окно. Вопрос: можно как-то сделать, чтобы при возникновении исключения - процесс молча "сворачивался"? |
|||
|
||||
| chupachups |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 0 Регистрация: 15.10.2008 Репутация: нет Всего: 1 |
копай в сторону перехвата событий Application.ThreadException и System.AppDomain.CurrentDomain.UnhandledException и в них делай закрытие приложения или просто пиши необработанное исключение в лог
Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
| sgrey |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 15.4.2006 Репутация: нет Всего: 4 |
может вместо костылей лучше посмотреть логи винды, а также вставить лог ошибок в программу, и таки её отдебажить?
|
|||
|
||||
| V0fka |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 5.11.2006 Где: Украина Репутация: нет Всего: нет |
chupachups, спасибо за ответ! Хотя кто-то, по-моему, в моей же какой-то теме на форуме говорил про эти события - но что-то я сам не допер попробовать использовать их сейчас. Сейчас сделал именно так. При их возникновении - пишу в лог что там было и закрываю приложение. Буду наблюдать.
sgrey, однозначно то о чем вы говорите - это лучше. Но в логах винды я ничего путевого не нашёл, что могло бы натолкнуть меня на какие-то варианты решения. Лог по совету chupachups-а вставил, надеюсь вставил куда положено и он поможет раскрыть мне этот ящик Пандоры. Но пока у меня не хватает ума определить где косяк. За ответ спасибо! |
|||
|
||||
| sgrey |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 15.4.2006 Репутация: нет Всего: 4 |
часто в лог винды записывается иерархия вызванных функций которые вызвали исключение или подробное описание что вылетело и почему. Вполне неплохое место чтобы попытаться понять в каких случаях оно может выскочить. Вообще по самому исключению можно предположить чего в программе делается когда она падает... Что за исключение вылетает хотябы известно? |
|||
|
||||
| V0fka |
|
||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 5.11.2006 Где: Украина Репутация: нет Всего: нет |
sgrey, мне повезло (если можно так сказать) и сегодня программа снова упала. Но кроме того, что снова упала - она во-первых поднялась без человеческого вмешательства, а во-вторых у меня появился лог вот такого содержания:
Раз пошла такая пьянка, то нужно рассказать по софтине что и как она делает. Есть Socket, который слушает входящие подключения и отправляет их в обработку. Это если в двух словах. В коде это выглядит примерно так. Есть ManualResetEvent:
По кнопке "Старт" выполняется следующее:
И вспомогательные функции:
И в описании исключения ошибка припадает на строку
в функции AcceptCallback. Теперь вопросы по сути: 1) Как это грамотно исправить? Кроме как обернуть содержимое функции AcceptCallback в try\catch - я не знаю что можно сделать ещё. 2) Решил я провести эксперимент. Создал BackgroundWorker и натравил его на метод, который просто выбрасывает исключение NotImplementedException. При этом в методе исключение возникает, но сама программа не выпадает. Почему же рабочая софтина выпадает при возникновении исключения в похожих условиях? |
||||||||||
|
|||||||||||
| sgrey |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 15.4.2006 Репутация: нет Всего: 4 |
обернуть эту строку Socket clientSocket = (Socket)serverSocket.EndAccept(asyncResult); в try-catch, создать лог и записывать туда подробности исключения. Потом можно будет разобраться при каких условиях оно вылетает. Может только с одного адреса оно вылетает, или бот подключится пытается, или таймаут срабатывает
Потом ну и return не забыть в случае исключения Почему поведение программы разное без кода сказать сложно - запуск внутри студии и на сервере -совсем разные вещи, и как там исключение вставлено тоже вопрос )) |
|||
|
||||
| V0fka |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 5.11.2006 Где: Украина Репутация: нет Всего: нет |
||||
|
||||
| sgrey |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 15.4.2006 Репутация: нет Всего: 4 |
Смотря что будешь писать в лог ))) Записывай всю доступную информацию и будет более подробно чем в исключении )) Например запиши адрес к/с которого было подключение, и другие вещи ) У тебя же там доступ есть ко всем объектам нужным - вот и бери всё что можешь из них. ну и ещё ты сможешь корректно завершить работу функции в этом случае Это сообщение отредактировал(а) sgrey - 12.1.2015, 23:10 |
|||
|
||||
| V0fka |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 5.11.2006 Где: Украина Репутация: нет Всего: нет |
sgrey, а, так...
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |