Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.02.2015, 23:59   #1
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию Как лучше всего собирать данные об исключениях в функции?

В данный момент есть функция полностью помещенная в try-catch, однако это позволяет узнать только, что в ней произошло исключение, а хотелось бы узнать об исключении все вплоть до параметров функции, вызвавшей исключение.
Что делать? Я знаю всего 2 решения проблемы:
1. ввести дополнительную строку exceptionInfo, которую заполнять перед каждым потенциально-опасным действием и выдавать ее при исключении.
2. наделать кучу try-catch.
Оба этих подхода мне не нравятся из-за их громоздкости.

Вот, кстати, нынешний код функции (лишь бы работало), который я собираюсь рефакторить (не надо в нем разбираться, ибо проблема с ним не очень связана):
Код:
private string GetWins(string Page)
		{
			string result = "";

			string strG = "";

			try
			{
				if (Page.IndexOf("<div class=\"table__rows\">") < 0)
					return "";
				List<string> gettedWon = new List<string>();
				int st = Page.IndexOf("<div class=\"table__rows\">");
				int en = Page.IndexOf("<div class=\"pagination\">");
				string inPage = Page.Substring(st, en - st);

				while (inPage.IndexOf("<div class=\"table__row-outer-wrap\">") > -1)
				{
					inPage = inPage.Substring(inPage.IndexOf("<div class=\"table__row-outer-wrap\">") + "<div class=\"table__row-outer-wrap\">".Length);
					if (inPage.IndexOf("<div class=\"table__row-outer-wrap\">") > -1)
						strG = inPage.Substring(0, inPage.IndexOf("<div class=\"table__row-outer-wrap\">"));
					else
						strG = inPage;

					strG = strG.Substring(strG.IndexOf("<a class=\"table__column__heading\" href=\"") + "<a class=\"table__column__heading\" href=\"".Length);
					strG = strG.Substring(strG.IndexOf(">") + 1);
					string str = strG.Substring(0, strG.IndexOf("<"));

					gettedWon.Add(str);
				}

				List<string> oldWon = new List<string>();
				foreach (string s in WonGames)
					oldWon.Add(s);

				//delete dublicates
				foreach (string s in oldWon)
				{
					gettedWon.Remove(s);
				}

				foreach (string s in gettedWon)
				{
					WonGames.Add(s);
					result += s + "\n";
				}
			}
			catch (Exception ex)
			{
				ErrorReporting("Error GetWins(): " + ex.Message + " | string=" + strG);
			}
			return result;
		}
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 20.02.2015, 00:29   #2
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

что-то не понятно в чем беда?
потенциально опасный код всегда известен, исключение есть, чего еще не хватает?
lomastr_ вне форума Ответить с цитированием
Старый 20.02.2015, 00:48   #3
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Этого кода много. Например функция SubString, которая выдает исключение "Значение StartIndex не может быть меньше нуля. Имя параметра: startIndex", их у меня с десяток в одной функции, как узнать какая из них выдает исключение и при каких параметрах?
Паршу один сайтишко, и это самый легкий способ добыть инфу.
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 20.02.2015, 01:19   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Точно самый легкий? Что насчет HtmlAgilityPack? http://www.programmersforum.ru/showp...27&postcount=3

А про проблему я не понял, но в Exception вроде ж есть инфа о методе и даже номер строки, если не удалять pdb.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 20.02.2015, 01:32   #5
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Точно самый легкий. Основное облегчение в том, что как раз не надо использовать посторонние классы, которые так же будут выдавать эксепшены при отсутствии искомых элементов.
Ошибки вываливаются не у меня, а у друзей, в этом и проблема.
Попробую HtmlAgilityPack, хоть и пробовал его использовать раньше.
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 20.02.2015, 01:38   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну можно не нарываться на эти экзепшны, а проверять самому найден ли элемент и кидать свое исключение с нужными данными и описанием.

А библиотеки для парсинга HTML удобнее такого парсинга хотя бы в плане надежности. Добавится в этот div еще один CSS класс для подсветки чего-нибудь и сломается парсинг Substring'ами. Ну и XPath запрос по-моему проще составлять, чем так, особенно на сложных сайтах, или когда лишние элементы попадаются и надо точнее выбирать.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 20.02.2015 в 01:41.
Alex11223 вне форума Ответить с цитированием
Старый 20.02.2015, 07:04   #7
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Ну вот. переписал функции под HtmlAgilityPack. Стало проще, но теперь код выглядит громоздко...
И встал другой вопрос, как внедрить библиотеку в exe.
UPD: вес приложения увеличился в 3 раза =/
alextrof94$gmail.com

Последний раз редактировалось alextrof94; 20.02.2015 в 07:39.
alextrof94 вне форума Ответить с цитированием
Старый 20.02.2015, 09:01   #8
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

юзайте регексы https://msdn.microsoft.com/en-us/lib...v=vs.100).aspx
lomastr_ вне форума Ответить с цитированием
Старый 20.02.2015, 10:31   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Не, регекспами тоже плохо HTML парсить, не сильно лучше первого варианта.
http://stackoverflow.com/questions/1...contained-tags

В 3 раза это сколько? Стало 150 КБ вместо 50? Серьезная проблема, да.

"Внедрить" можно ILMerge, но смысла мало. Чем вам так dll мешает? Вы ж не вирусы пишете. Отправляйте папку в zip архиве либо инсталлятор используйте.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 20.02.2015 в 10:37.
Alex11223 вне форума Ответить с цитированием
Старый 20.02.2015, 10:37   #10
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

html это текст, регекс для текста и создан, что не так?
lomastr_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как лучше всего защитить dll от взлома? Ecosasha Свободное общение 8 04.09.2012 22:02
Как лучше всего получать письма? DEA7H Общие вопросы Delphi 4 06.06.2012 17:55
Как лучше всего реализовать игру пятнашки? Sauber C++ Builder 2 18.11.2011 22:52
ASP.NET. Как лучше всего сохранить запрос? Stilet ASP.NET 4 01.06.2010 13:11
Как лучше всего освобождать созданные в потоке объекты? TwiX Общие вопросы Delphi 2 13.03.2010 21:27