Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
 Аватар для ZetX
49 / 49 / 17
Регистрация: 23.02.2010
Сообщений: 437
.NET 3.x

Перехватить исключение

25.03.2016, 11:26. Показов 1342. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть самописный OPC клиент на основе OPCdotNETLib, который периодически опрашивает OPC сервер на локальном компе. OPCdotNETLib работает через COM. Через несколько рандомных часов выкидывается исключение, похоже виндовое, но при этом программа продолжает работать. И предлагается отправить отчет. Если нажать не отправлять программа закрывается.
Не знаю как перехватить это исключение. По сути мне только надо скрыть окно с предложением отправки отчета, ибо программа продолжает работать.
Миниатюры
Перехватить исключение  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.03.2016, 11:26
Ответы с готовыми решениями:

Не могу перехватить исключение System.ArgumentException
Вот кусок кода: try { StreamReader sr = File.OpenText(path); for (int i = 0; i...

Как перехватить процесс?
Как перехватить процес ворда?

перехватить подписку на событие
Есть интерфейс, декларирующий события. Есть мой класс, реализующий интерфейс. Логика класса требует фиксировать все факты подписки и...

3
310 / 318 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
25.03.2016, 14:51
ZetX, Может попробовать в режиме отладки запустить в студии? тогда покажет место, где оно возникает
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18285 / 14208 / 5368
Регистрация: 17.03.2014
Сообщений: 28,888
Записей в блоге: 1
25.03.2016, 15:21
ZetX, не в том направлении думаешь. Правильнее найти и исправить ошибку. В информации об ошибке (error signature) видно что она произошла в сборке opcdotnetlib (p4) в члене с токеном 6с (P7) в IL-команде со смещением 1d (P8). Если под opcdotnetlib имеется в виду библиотека из статьи OPC and .NET with COM Interoperability, то под токен 0600006C попадает метод OpcGroup.Remove(bool). Попытка проверить что делает IL код со смещением 1d не увенчалась успехом т.к. при компиляции в Debug там безобидный ldarg.0, а в Release такого смещения нет. Скорее всего причина в версии компилятора. Нужно смотреть твою сборку. Однако предположения можно продолжать строить. Программа падает через долгий и разный промежуток времени. Метод Remove() вызывается из финализатора. Это наводит на мысль что приложение падает на вызове Remove() из финализатора. Случайность падения можно объяснить тем что мы не контролируем время вызова финализаторов и видимо нечто что приводит к его падению не происходит сразу.

Если есть возможность, то добавь в программу протоколирование необработанных исключений, положи рядям с ней pdb файл, запусти и дождись появления ошибки. Тогда по типу исключения и по трассировке стека можно будет думать что делать дальше.

Также можно реализовать IDisposable в OpcGroup и сделать освобождение ресурсов явным с помощью using или вызова Dispose(). Это очевидно потребует внимательного анализа кода на предмет мест где создается OpcGroup и где он перестает быть нужным. Хотя прежде чем браться за это, я бы сначала получил точный текст и место исключения т.к. мои предположения относительно места ошибки могут оказаться неверными.

Добавлено через 16 минут
В поле P9 должно быть имя исключения, но там хеш (pszqoadhx1u5zahbhohghldgiy4qixhx) по которому нельзя восстановить имя. На stackoverflow есть вопрос как раз про похожий мусор и там утверждается что это COM исключение. Метод Remove() среди прочего освобождает COM объекты. Так что возможно мое предположение близко к истине.
1
 Аватар для ZetX
49 / 49 / 17
Регистрация: 23.02.2010
Сообщений: 437
28.03.2016, 14:14  [ТС]
Запустил в режиме отладки через SharpDevelop (студию пока нет возможности поставить)
Два раза раза отловилось исключение:

C#
1
2
3
4
5
6
7
8
9
System.Runtime.InteropServices.COMException: Сервер RPC недоступен. (Исключение из HRESULT: 0x800706BA)
   в OPC.Data.Interface.IOPCServer.AddGroup(String szName, Boolean bActive, Int32 dwRequestedUpdateRate, Int32 hClientGroup, Int32[] pTimeBias, Single[] pPercentDeadband, Int32 dwLCID, Int32& phServerGroup, Int32& pRevisedUpdateRate, Guid& riid, Object& ppUnk)
   в OPC.Data.OpcGroup.internalAdd(Int32[] biasTime, Single[] percentDeadband, Int32 localeID)
   в OPC.Data.OpcServer.AddGroup(String groupName, Boolean setActive, Int32 requestedUpdateRate, Int32[] biasTime, Single[] percentDeadband, Int32 localeID)
   в OPC.Data.OpcServer.AddGroup(String groupName, Boolean setActive, Int32 requestedUpdateRate)
   в OPCLogger.Tester.Connection()
   в OPCLogger.Tester.Read()
   в OPCLogger.Tester.Work()
   в OPCLogger.Tester.Main(String[] args)
C#
1
2
3
4
System.Runtime.InteropServices.COMException: Сервер RPC недоступен. (Исключение из HRESULT: 0x800706BA)
   в System.Runtime.InteropServices.UCOMIConnectionPoint.Unadvise(Int32 dwCookie)
   в OPC.Data.OpcServer.Disconnect()
   в OPC.Data.OpcServer.Finalize()
Исключения ни на какую строку не указывают.

Еще OPC сервер периодически перезапускаю. Возможно из-за этого может вылезать эта ошибка.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.03.2016, 14:14
Помогаю со студенческими работами здесь

Как перехватить redirect
Сабж, как же получить,весь гугл перерыл но информацию не нашел!

Перехватить нажатие Enter
Подскажите, пожалуйста два вопросика. 1) У меня на форме есть TextBox. Содержимое TextBox я обрабабытываю по одной кнопке. Вопрос: как мне...

Перехватить нажатие трех клавиш
нужно выдать сообщение по нажатии комбинации клавиш. Нашел на форуме тему где приводится пример нажатия 2ух клавиш, но вот вопрос, как...

Перехватить нажатие кнопки в другом приложении
Есть прога, написанная вроде на дельфях (остался только exe-шник), есть ли возможность перехватить нажатие кнопки на этой форме и сделать...

Трафик с заданной программы перехватить и модифицировать
Всем привет. Ситуация: Есть проксиффикатор он ловит трафик с заданной программы и перенаправляет его на локальный порт(на прммер 5555)....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru