Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 17.08.2011
Сообщений: 15
1
.NET 4.x

Возникает исключение, минуя try-catch

10.04.2012, 12:28. Показов 2182. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем добрый день.

Имею следующую проблему. Написана серверная часть программы, которая из определенной очереди забирает в однопоточном режиме запросы и выполняет их в отдельных потоках. Все работает вроде бы круто, пока не стали проводить нагрузочное тестирование. И тут появились некоторые подводные камни, точнее один основной большой камень. При нагрузке сервера через некоторое время(каждый раз примерно разное) появляется окошко, что произошла ошибка в приложении и предложение завершить приложение и отладить. В инфо ничего вразумительного не написано, но когда закрываешь это окошко, в консоль пишется исключение:


Исключение
Необработанное исключение:Необработанное исключение: System.Reflection.TargetIn
vocationException: Адресат вызова создал исключение. ---> System.AccessViolation
Exception: Попытка чтения или записи в защищенную память. Это часто свидетельств
ует о том, что другая память повреждена.
в CryptoPro.Sharpei.NetDetours.NativeDetourEntryPoint.OnAssemblyLoadEvent(Ass
embly loadedAssembly)
в System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnl
y, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boo
lean& bNeedSecurityCheck)
в System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheck
This, Boolean fillCache)
в System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean sk
ipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache)
в System.Activator.CreateInstance(Type type, Boolean nonPublic)
в System.Xml.Serialization.TempAssembly.get_Contract()
в System.Xml.Serialization.TempAssembly.InvokeReader(XmlMapping mapping, XmlR
eader xmlReader, XmlDeserializationEvents events, String encodingStyle)
в System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, Str
ing encodingStyle, XmlDeserializationEvents events)
в System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader)
в ********************(********) в **********************.cs:строка 377
в ********************(********) в **********************.cs:строка 134
--- Конец трассировки внутреннего стека исключений ---
в System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo method, Obj
ect target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAtt
ributes, RuntimeType typeOwner)
в System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo method, Obje
ct target, Object[] arguments, Signature sig, MethodAttributes methodAttributes,
RuntimeType typeOwner)
в System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeA
ttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibi
lityChecks)
в System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeA
ttr, Binder binder, Object[] parameters, CultureInfo culture)
в System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
в ********************(********) в **********************.cs:строка 83
в ********************(********) в **********************.cs:строка 100
в ********************(********) в **********************.c
s:строка 79
в System.Threading.ThreadHelper.ThreadStart_Context(Object state)
в System.Threading.ExecutionContext.runTryCode(Object userData)
в System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCle
anup(TryCode code, CleanupCode backoutCode, Object userData)
в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionCon
text, ContextCallback callback, Object state)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, Co
ntextCallback callback, Object state, Boolean ignoreSyncCtx)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, Co
ntextCallback callback, Object state)
в System.Threading.ThreadHelper.ThreadStart(Object obj)




Звездочками пометил свои пользовательские методы и имена файлов. Казалось бы все тривиально и в исключении все написано. Но весь смак в том, что весь код обложен try-ями вида:

C#
1
2
3
4
try
{    }
catch(Exception ex)
{    }
И данное исключение не исключение Т.е. код, на который идет ссылка в трейсе лежит внутри выше описанного try-я. Собственно у меня и вопрос, может ли быть так, что исключение не перехватывается в силу каких-либо обстоятельств, и если это возможно, то какие должны быть обстоятельства?

Всем заранее спасибо за помощь.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.04.2012, 12:28
Ответы с готовыми решениями:

Не обрабатывается исключение try-catch
Помогите пожалуйста с задачей. Вот код: using System; using System.Collections.Generic; using...

Не могу вывести исключение с try и catch
using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

Почему оператор catch не обрабатывает исключение?
Не могу понять почему catch не обрабатывает заданное ему исключение: private static...

Возникает исключение при десериализации
Здравствуйте. Решил заняться изучением C# и столкнулся с проблемой. При десериализации классов...

8
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
10.04.2012, 13:57 2
Хотелось бы глянуть на этот участок кода, вместе с блоками try и catch.
0
0 / 0 / 0
Регистрация: 17.08.2011
Сообщений: 15
10.04.2012, 15:49  [ТС] 3
Хотелось бы глянуть на этот участок кода, вместе с блоками try и catch.
Код следующий, изменил только названия классов и функций.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public sealed class classAController : IclassA
{
        private static readonly classAController instance = new classAController();
 
        private classAController(){}
 
        public static classAController Instance
        {
            get { return instance; }
        }
 
        public string method1(string arg1)
        {
            document requestDocument;
            documentZapros ulRequestElement;
 
            try
            {
                var xmlDocument = new XmlDocument();
                var documentRootAttribute = new XmlRootAttribute("document");
                var documentSerializer = new XmlSerializer(typeof (document), documentRootAttribute);
                var ulRootAttribute = new XmlRootAttribute("zapros");
                var ulSerializer = new XmlSerializer(typeof (documentZapros), ulRootAttribute);
                var responseDocumentSerializer = new XmlSerializer(typeof (document1));
                var documentReaderSettings = new XmlReaderSettings();
                var ulReaderSettings = new XmlReaderSettings();
 
                xmlDocument.LoadXml(arg1);
 
                var documentStream = new StringReader(arg1);
                var reader = XmlReader.Create(documentStream, documentReaderSettings);
//судя по трейсу в след строке происходит исключение. На десериализации.
                requestDocument = (document) documentSerializer.Deserialize(reader);
                reader.Close();
                documentStream.Close();
.......................................................
            }
            catch (Exception ex)
            {
                throw new myException( "bla bla bla", ex);
            }
       }
}
Свое пробрасываемое исключение я разумеется отлавливаю на более верхнем уровне. Отмечу, что подобное поведение программы происходит только при нагрузочном тестировании спустя некоторое время работы программы.
0
1319 / 992 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
10.04.2012, 16:02 4
С такими проблемами надо не сюда, а к разработчикам этого "КриптоПро" обращаться. А код рабочий, чо.
0
0 / 0 / 0
Регистрация: 17.08.2011
Сообщений: 15
10.04.2012, 16:30  [ТС] 5
С такими проблемами надо не сюда, а к разработчикам этого "КриптоПро" обращаться.
Т.е. если я правильно понял, то ошибка где-то в этой компоненте "КриптоПро"? Вот только вопрос, ведь мой код пораждает вызов внутренних функций. И если там какая-то ошибка произошла, разве не должен оттуда подняться Exception в мой метод и обработаться?

Често на своей практике с таким первый раз столкнулся и даже не представляю, откуда начать копать решение проблемы.
0
1319 / 992 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
10.04.2012, 17:29 6
таких "ошибок" много...
сборки загружаются в динамике и в обход пользовательского кода
для примера можно сделать. решение, в нем 2 проекта. один ссылается на другой. в исполняемом:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
using ClassLibrary1;
 
namespace ConsoleApplication23 {
    class Program {
        static void Main(string[] args) {
            Console.WriteLine("Начало");
            Foo();
            Console.ReadKey();
        }
 
        static void Foo() {
            try {
                Class1 c = new Class1();
            } catch {
                Console.WriteLine("Поймано...");
            }
        }
    }
}
думаю, понятно о чём речь...
компилируем и стираем DLL файл, который рядом с исполняемым лежит
так вот, "Начало" будет, но "Поймано" - нет
сорь, спешу
1
0 / 0 / 0
Регистрация: 17.08.2011
Сообщений: 15
10.04.2012, 20:52  [ТС] 7
Mikant, спасибо большое за разъяснение. Попробовал Ваш код и действительно исключение пользовательским кодом не было перехвачено. Скорее всего в этом "КриптоПро" какая-то подобная ошибка и скрыта. Буду писать им в саппорт.

Благодарю за помощь.
0
21 / 21 / 6
Регистрация: 07.01.2010
Сообщений: 376
07.02.2014, 08:28 8
Кстати то, наверное, XmlSerializer косячил. У меня постоянно подобное с ним, стоит только подсунуть неподходящий файл. Кто нибудь знает как избежать этого, каким образом можно обработать такое исключение, как вообще избежать падения?
0
44 / 44 / 19
Регистрация: 20.01.2014
Сообщений: 87
07.02.2014, 09:12 9
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Serg046 Посмотреть сообщение
как вообще избежать падения?
Применить атрибут [HandleProcessCorruptedStateExceptions] к методу в котором пробовать словить исключение (System.Exception) от метода который приводит к падению приложения.

Например:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using System.Runtime.ExceptionServices;
..
[HandleProcessCorruptedStateExceptions]
static void Main()
{
    try
    {
        // этот метод может привести к падению приложения!
        dangerousMethod();
    }
    catch(Exception e)
    {
        // если метод dangerousMethod() создал ошибку которая приводит к падению
         Console.WriteLine("не упало");
    }
3
07.02.2014, 09:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.02.2014, 09:12
Помогаю со студенческими работами здесь

Почему не возникает исключение OverflowException?
Есть такой код: //max - 2147483647 int a = 2000000000; int b = 2000000000; int c = 0; ...

В коде используется Try catch, но все равно выбрасывается необработанное исключение
Подскажите, у меня код находится в: try { ...... } catch (Exception e) { ...

Возникает исключение при записи в txt файл (Процесс не может получить доступ к файлу)
Прив! При исполнении следующего кода using System; using System.Collections.Generic; using...

Исключение try catch
Добрый вечер, в программе пользователю предлагается ввести ключ, значение, принимающее ключ имеет...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru