powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Когда подавлять исключения а когда пропускать?
69 сообщений из 69, показаны все 3 страниц
Когда подавлять исключения а когда пропускать?
    #38557332
FatherSql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пусть есть функция func в которой может возникнуть исключение. У нас есть 2 варианта
1. поймать в ней исключение и вернуть какойто результат типа
bool func()
{
bool res = true;

try
{
}
catch()
{
res = false;
}

return res;
}

2. Можно не ловить.

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

void func3()
{
func2();
}

void func2()
{
func();
}

то мы задолбаемся прокидывать наверх какие то осмысленные коды возврата (если это не тру фалс конечно, так действительно просто).

Вот интересует как лучше?
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38557351
WebSharper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подавлять никогда не надо - либо обрабатываешь осмысленно, либо отправляешь выше, возможно оборачивая в исключение более высокого уровня (типа "не смог импортировать файл (потому, что доступ запрещен)")
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38557388
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FatherSql,

Пусть есть маленькая комната с кафельным полом. У нас есть два варианта:
1. Поставить ванну.
2. поставить унитаз.
Вот интересует как лучше.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38557685
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WebSharperПодавлять никогда не надо - либо обрабатываешь осмысленно, либо отправляешь выше, возможно оборачивая в исключение более высокого уровня (типа "не смог импортировать файл (потому, что доступ запрещен)")+1
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38557946
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FatherSql, обычно придерживаются такой стратегии что исключения
не должны "частить". Или дёргаться часто. На сотни-тысячи успешных
callbacks у вас должен быть один исключительный. Исключения (в зависимости
от реализации могут быть "дорогими в обслуживании". Они могут где-то выделять
память. Поэтому не стоит их толкать внутрь цикла где факт исключения "зымыливается"
и цикл повторяется Это bad practice. По возможности лучше использовать
коды возврата если по смыслу callback это позволяет.

Исключения удобно применять тогда где нужно "аварийно завершить всё".
Например - отъехал сетевой диск. Вы сворачиваете весь стек вызовов
который работает с ним.

Остальное - вопросы дизайна вашей библиотек и предмет договрённостей
между вами и теми кто эту библиотеку будет использовать. Обычно вы не
кодите в вакууме. Вы оглядываетесь по сторонам. Смотрите как пишут
в team, в проекте в корпорации или какие code conventions.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38558472
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребята, все конкретики языка программирования и задачи эти все обсуждения бессмысленны.
Нет общих правил, когда как нужно обрабатывать исключения.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38558930
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FatherSqlпусть есть функция func в которой может возникнуть исключение. У нас есть 2 варианта
1. поймать в ней исключение и вернуть какойто результат типа
Это редко является хорошим подходом. Собственно, я пожалуй что рискну утверждать, что во всех случаях, когда вообще стоит выбор "первый или второй вариант", первый явно не стоит использовать.

FatherSqlТак вот я про плюсы второго метода, собсвтенно он один - меньше кода,
Его главный плюс в том, что он гораздо надёжнее, по крайней мере "в среднем по больнице".
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38559045
FatherSql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerFatherSqlпусть есть функция func в которой может возникнуть исключение. У нас есть 2 варианта
1. поймать в ней исключение и вернуть какойто результат типа
Это редко является хорошим подходом. Собственно, я пожалуй что рискну утверждать, что во всех случаях, когда вообще стоит выбор "первый или второй вариант", первый явно не стоит использовать.

FatherSqlТак вот я про плюсы второго метода, собсвтенно он один - меньше кода,
Его главный плюс в том, что он гораздо надёжнее, по крайней мере "в среднем по больнице".
чем надежнее
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38559055
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Про обработку исключений говорят правильно, это идет из старых умных книжек, но сейчас в C++ часто вся обработка заключается в выходе из области видимости с вызовом деструкторов, а в catch() просто сообщается факт ошибки пользователю.

Я использую исключения в случаях:
1. Когда удобно получать полезное возвращаемое значение:
Код: plaintext
1.
2.
3.
4.
try {
 str = get_par_str();
 // ...
}


2. Когда при ошибке не имеет смысла использовать полученные данные из функции и вся обработка исключения заключается в выходе из области видимости и вызове деструкторов:
Код: plaintext
1.
2.
3.
4.
5.
try { 
 auto ptr = get_instance();
 // ...
} 
catch (...) { /* empty or std::cout */ } 


2. Когда одни и те же исключения могут выйти из нескольких функций:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
try {
 func1();
 func2();
 func3();
 func4();
} 
catch(std::bad_alloc &ba) { /* something */ }
catch(...) { /* something */ } 



В остальных случаях return. В частности когда функцию пишет другой человек, в ней может возникнуть несколько разных исключений, причем их количество и тип может меняться разработчиком функции, то лучше, чтобы в самом интерфейсе функции была заложена классификация и сквозная нумерация ошибок, т.е. в h-файле enum который и возвращается. Но и в этом правиле бывают исключения.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38559091
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Допустим если функция имеет такой вид:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
func() {

 try { 
  auto str = get_par_str();
  // ...

  auto ptr = get_instance();
  // ...

  auto obj = get_some_obj();
  // ...


 } // automatic calls destructors for solve exceptions
 catch (std::bad_alloc &ba) { std::cout << ba.what() << std::endl; /* something */ } 
 catch (std::runtime_error &rt) { std::cout << rt.what() << std::endl; /* something */ } 
 catch (std::exception &ex) { std::cout << ex.what() << std::endl; /* something  */ } 
 catch (...) { std::cout << "Unknown exception"<< std::endl; /* something  */ } 

 // ...
}



С return и кодам ошибок выглядело бы так - больше кода и больше вложенности:
Код: plaintext
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.
44.
45.
46.
func() {


 {
  errcode1_t errcode1;
  std::string str
  if (!(errcode1 = get_par_str(&str))) {
   switch(errcode1) {
    case err1_1: /* */ break;
    case err1_2: /* */ break;
    case err1_3: /* */ break;
    default: std::cout << "Unknown error"<< std::endl; break;
   }
  } else {
   // ...

   errcode2_t errcode2;
   std::shared_ptr<T> ptr;
   if (!(errcode2 = get_instance(&ptr))) {
    switch(errcode2) {
     case err2_1: /* */ break;
     case err2_2: /* */ break;
     case err2_3: /* */ break;
     default: std::cout << "Unknown error"<< std::endl; break;
    }
   } else {
    // ...

    errcode3_t errcode3;
    T2 obj;
    if (errcode3 = get_some_obj(&obj)) {
     switch(errcode3) {
      case err3_1: /* */ break;
      case err3_2: /* */ break;
      case err3_3: /* */ break;
      default: std::cout << "Unknown error"<< std::endl; break;
     }
    } else {
     // ...
   }
  }
 } // automatic calls destructors for solve errors


 // ...
}



И без RAII ещё бы в разы больше кода было.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38559147
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FatherSqlчем надежнее
Да много чем. Меньше кода - меньше ошибок. Код прозрачнее - меньше ошибок. Легче сопровождение, меньше сил на работу с кодами завершения - итогом всего является "меньше ошибок". Но самое главное - поведение при внесении изменений в другие части программы.

Допустим, у нас в приложении используется некая функция. Всё работает без ошибок. В ходе доработок в ней появился новый код возврата - упс, нужно перепроверять все места её вызова. Если где-то вызывающий код останется "старым", последствия непредсказуемы; в том числе выполнение может пойти по ветке кода OK.

Теперь та же ситуация, но в функцию добавлено новое исключение. Что происходит со старым кодом? Да ничего страшного, собственно. Исключение провалится до стандартного обработчика, который запишет в лог "произошла неожиданная ошибка такая-то", либо вообще не будет обработано и повалит приложение. То есть по крайней мере приложение не будет делать вид, что всё в порядке, не испортит данные и не попытается обработать ошибку А методами ошибки Б.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38559303
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
softwarerВ ходе доработок в ней появился новый код возврата - упс, нужно перепроверять все места её вызова. Изначально надо писать код так, что необрабатываемые коды пишут в лог и валят приложение.
Это можно сделать как исключениями, так и проверками кода возврата.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38559330
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNoseИзначально надо писать код так, что необрабатываемые коды пишут в лог и валят приложение.
Во-первых, "нужно" не значит "везде будет". Я давно привык закладывать в подходы предположение, что программист ошибётся везде, где у него есть такая возможность. И в этом случае с кодами возврата будет наломано больше дров. Ну а во-вторых, далеко не всегда необрабатываемые коды должны валить приложение. Не так редко отказ какого-то модуля представляется меньшим злом, нежели отказ приложения в целом.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38559382
super-code
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все твердят, что при неизвестном исключении надо его не обработать (валить приложение) с записью в лог. Хорошая практика.
Да тут все понятно. Но скажите, товарищи, допустим наше приложение - веб-сервер. К которому приходят тысячи запросов. Один из этих запросов привел к неизвестному исключению. Приложение записало это в лог, и упало. 9999 успешно работающих сейчас коннектов завершились. Это Вы называете хорошей практикой?

Иногда можно перехватывать любые исключений, проверять, если это исключение, после которого невозможно работать далее, то валить приложение. Если можно работать дальше, то валить, только эту ветку, а остальная часть кода должна продолжать функционировать. В лог запись конечно таких ошибок должна быть.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38559449
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
super-codeВсе твердят, что при неизвестном исключении надо его не обработать (валить приложение) с записью в лог. Хорошая практика.
Да тут все понятно. Но скажите, товарищи, допустим наше приложение - веб-сервер. К которому приходят тысячи запросов. Один из этих запросов привел к неизвестному исключению. Приложение записало это в лог, и упало. 9999 успешно работающих сейчас коннектов завершились. Это Вы называете хорошей практикой?Это Вы фигню какую-то выдумали. Отдельный запрос получит 500-ю, или 404-ю (обычно если исключения перехватывают, пишут в лог, то отдают ответ с этим кодом), остальные успешно продолжат работать дальше.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38559469
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
super-codeВсе твердят, что при неизвестном исключении надо его не обработать (валить приложение) с записью в лог. Хорошая практика.
Да тут все понятно. Но скажите, товарищи, допустим наше приложение - веб-сервер. К которому приходят тысячи запросов. Один из этих запросов привел к неизвестному исключению. Приложение записало это в лог, и упало. 9999 успешно работающих сейчас коннектов завершились. Это Вы называете хорошей практикой?
Где уверенность что перед исключением не было записи "мусора" в память, которой пользуется один из 9999 успешных? Можно утверждать что все 9999 вернут достоверный результат?
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38559475
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TГде уверенность что перед исключением не было записи "мусора" в память,
Ровно там же, где уверенность, что записи "мусора" в память не было без всякого исключения (или при коде возврата OK). Вы так смешно говорите, словно вызываемый любезно возвращает специальную ошибку, "господа, я насрал вам в оперативку" :)
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38559479
super-code
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, разработчики .NET и IIS windows с Вами не согласны. Проверьте - создайте свой сайт ASP.NET при запросе бросьте своё исключение и не обрабатывайте его. После этого IIS не упадет, а будет нормально работать дальше.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38559482
super-code
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA, и как же он получит ответ на http-запрос, если в коде не обработаете это исключение? Я Вам про это и вещаю, что иногда надо обрабатывать любое исключение, даже неизвестное.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38559767
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
eNosesoftwarerВ ходе доработок в ней появился новый код возврата - упс, нужно перепроверять все места её вызова . Изначально надо писать код так, что необрабатываемые коды пишут в лог и валят приложение.
Это можно сделать как исключениями, так и проверками кода возврата.
Это да! Как и в исключениях они ловятся через catch(...), так и в кодах возврата они ловятся через else в if или в default в case. Но удобство исключений в том, что отлавливать такие неизвестные исключения можно в одном месте сразу для 10 функций, а неизвестные коды возврата надо проверять для каждой функции - больше кода .
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38559769
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
super-codeИногда можно перехватывать любые исключений, проверять, если это исключение, после которого невозможно работать далее, то валить приложение. Если можно работать дальше, то валить, только эту ветку, а остальная часть кода должна продолжать функционировать. В лог запись конечно таких ошибок должна быть.
Есть и третий вариант, когда неизвестно невозможно или можно работать дальше - неизвестное исключение/код возврата. В этом случае предполагается худший вариант - невозможно.
Но идут всегда на компромисс, просто все потоки и подключения изначально поделены между несколькими процессами с изолированной памятью, и падает только один из процессов. Лучше если 10% соединений передподключатся, чем вместо 1 000 спишется 1 000 000 руб в биллинге.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38559878
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иногда бывают ситуации когда обрабатывать что-либо уже поздно.
К примеру совершенно непонятно как надо обрабатывать java.lang.OutOfMemoryError.
Оно вроде бы и ежу ясно что постфактумом анализировать увеличивать mX, анализировать
дамп и делать прочие неспешные акты. Но что делать в рилтайме? Вроде уже и нечего.
Можно только рухнуть в лог с уровнем FATAL, или MEGA_FATAL, ... или саркастически
написать какой-то афоризм... типа "Вечны смерть, налоги и нехватка хипа...."
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38559925
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonкак надо обрабатывать java.lang.OutOfMemoryError. Но что делать в рилтайме?
Закрыть только это соединение с сообщением об ошибке. Остальные соединения уже себе память выделили - пусть работают.
Плюс в такой ситуации можно в течении X минут сразу отлупливать новые соединения, где X - среднее время жизни одного соединения.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38559926
super-code
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вася Уткинsuper-codeИногда можно перехватывать любые исключений, проверять, если это исключение, после которого невозможно работать далее, то валить приложение. Если можно работать дальше, то валить, только эту ветку, а остальная часть кода должна продолжать функционировать. В лог запись конечно таких ошибок должна быть.
Есть и третий вариант, когда неизвестно невозможно или можно работать дальше - неизвестное исключение/код возврата. В этом случае предполагается худший вариант - невозможно.
Но идут всегда на компромисс, просто все потоки и подключения изначально поделены между несколькими процессами с изолированной памятью, и падает только один из процессов. Лучше если 10% соединений передподключатся, чем вместо 1 000 спишется 1 000 000 руб в биллинге.

И с вами не согласны разработчики .NET и IIS, пример приводил. Также не согласны разработчики ms sql server. Попробуйте в ms sql server зарегистрировать свою сборку, при её вызове бросать exception. Сделайте запрос sql к серверу и с вызовом вашей сборки. Служба sql server не упадет, а только ответит ошибкой - служба обрабатывает любое исключение, даже не зная о чем оно. А если служба знает, что за исключение и уверена, что дальше работать нельзя, то тогда падает. И ни на какие части подключенные к sql server не делятся путем запуска нескольких процессов.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38559933
super-code
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вася Уткин, я привел уже пару примеров мировых продуктов, которые обрабатывают любое исключение. И готов привести ещё 10 (если не мировых, то очень известных). А вы можете к своей теории добавить практику - привести пример известного продукта, в который можно внедрять свои разработки, и при неизвестном исключении весь процесс будет падать?
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38559946
locked
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
super-codeВася Уткинпропущено...

Есть и третий вариант, когда неизвестно невозможно или можно работать дальше - неизвестное исключение/код возврата. В этом случае предполагается худший вариант - невозможно.
Но идут всегда на компромисс, просто все потоки и подключения изначально поделены между несколькими процессами с изолированной памятью, и падает только один из процессов. Лучше если 10% соединений передподключатся, чем вместо 1 000 спишется 1 000 000 руб в биллинге.

И с вами не согласны разработчики .NET и IIS, пример приводил. Также не согласны разработчики ms sql server. Попробуйте в ms sql server зарегистрировать свою сборку, при её вызове бросать exception. Сделайте запрос sql к серверу и с вызовом вашей сборки. Служба sql server не упадет, а только ответит ошибкой - служба обрабатывает любое исключение, даже не зная о чем оно. А если служба знает, что за исключение и уверена, что дальше работать нельзя, то тогда падает. И ни на какие части подключенные к sql server не делятся путем запуска нескольких процессов.

Это архитектура приложения. Например в MSSQL расширенная процедура запускается в изолированном процессе. Нечто подобное происходит и с запуском .NET сборки.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38559954
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы спорите ниочём. Это вопрос протокола и договорённостей. И возможно стоит обсудить
доп. условия. Язык. Среда. Сильною/слабую связность компонентов. Модульность. Выгружаемость.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38559987
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
super-codeВася Уткинпропущено...

Есть и третий вариант, когда неизвестно невозможно или можно работать дальше - неизвестное исключение/код возврата. В этом случае предполагается худший вариант - невозможно.
Но идут всегда на компромисс, просто все потоки и подключения изначально поделены между несколькими процессами с изолированной памятью, и падает только один из процессов. Лучше если 10% соединений передподключатся, чем вместо 1 000 спишется 1 000 000 руб в биллинге.

И с вами не согласны разработчики .NET и IIS, пример приводил. Также не согласны разработчики ms sql server. Попробуйте в ms sql server зарегистрировать свою сборку, при её вызове бросать exception. Сделайте запрос sql к серверу и с вызовом вашей сборки. Служба sql server не упадет, а только ответит ошибкой - служба обрабатывает любое исключение, даже не зная о чем оно. А если служба знает, что за исключение и уверена, что дальше работать нельзя, то тогда падает. И ни на какие части подключенные к sql server не делятся путем запуска нескольких процессов.
А вы уверены, что ваша процедура запускается в одном процессе с самой СУБД, и что не закрывается весь процесс в котором запускается процедура? И что если произойдет критическое исключение в коде самой СУБД, то СУБД продолжит работать?
Разработчики .NET и IIS согласны со здравым смыслом и со мной :)
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560004
super-code
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вася Уткин, что в ms sql server, а также IIS и .NET не появляется отдельного процесса - уверен. Так, что с Вашей практикой?
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560009
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonК примеру совершенно непонятно как надо обрабатывать java.lang.OutOfMemoryError. ... Но что делать в рилтайме?
Ну например:

0. Отпустить прибережённый для этой цели резерв
1. Гробануть обработку конкретного запроса, если этого не случилось в ходе разматывания стека
2. Если после этого памяти стало нормально, продолжить работу, опционально настучав по голове автору запроса на тему "поумерь аппетиты"
3. Если после этого памяти останется мало, сбросить всяческие кэши и подрезать параметры типа "максимальный размер", "максимум одновременно работающих" итп.
4. Когда памяти станет нормально, не забыть снова выделить аварийный буфер
5. Если пункт 3 начинает повторяться с надоедливым постоянством, написать разработчикам "поднимите свои задницы и ищите, где утечка памяти, пока я совсем не сдох", улучшить момент и перезапуститься
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560012
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
super-codeskyANA, и как же он получит ответ на http-запрос, если в коде не обработаете это исключение?Простите, а что он получит по Вашему?
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560013
super-code
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton, я с Вами согласен. Существуют ситуации, когда надо обрабатывать любое исключение, а существуют, когда не надо. И это вопрос архитектуры. Но Вася Уткин уверен, что подход настоящего джедая один - не обрабатывать неизвестные исключения и код вида:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
void PluginExecute(plugin)
{
 try
 {
   plugin->Execute();
 }
 catch(Exception ex)
{
  if (ex not in FatalErrorList)
    FailPlugin(ex); // без throw далее этого exception
  else throw ex;
}

}



Это говнокод.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560017
super-code
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA, если мой процесс - веб-сервер, и он упадет. То клиент ничего не получит. У вас другое мнение на этот счет?
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560022
locked
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
super-codeВася Уткин, что в ms sql server, а также IIS и .NET не появляется отдельного процесса - уверен. Так, что с Вашей практикой?
в случае с .NET появляется виртуальная машина. В случае с реальным кодом - процесс.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560033
super-code
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
locked, только что создал новый сайт на iis 7. Страница на asp.net (.net 4.0) при загрузке ждет 3 секунды (sleep), потом бросает исключение.

Следил за кол-вом процессов. Оно - 39, как до запуска страницы, так во время работы, так и после.
Процессов новых не появлялось, все выполняется там же. Осталось понять, что вы подразумеваете под виртуальной машиной (vmware) тоже не запустился?




Если единственный аргумент не перехватывать неизвестные исключения - это возможная порча памяти. Так я открою вам глаза - в windows можно записать данные и в память чужого процесса. Поэтому советую после неизвестного исключения - сразу перезагружать компьютер - так надежнее.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560035
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
super-codeskyANA, если мой процесс - веб-сервер, и он упадет. То клиент ничего не получит. У вас другое мнение на этот счет?Не, ну если веб-сервер упадёт...

А понял, я с утра не внимательно прочитал Ваше первое сообщение. Там речь о веб-сервере. Я же прочитал как веб-сервис.
Ошибочка вышла
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560041
super-code
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
locked, если под виртуальной машиной подразумевается новый домен приложения:
http://msdn.microsoft.com/en-us/library/system.appdomain.createdomain(v=vs.90).aspx

То было бы очень интересно послушать, как это реализовано без перехвата неизвестных исключений.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560043
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
super-codeЕсли единственный аргумент не перехватывать неизвестные исключения - это возможная порча памяти. Так я открою вам глаза - в windows можно записать данные и в память чужого процесса. Поэтому советую после неизвестного исключения - сразу перезагружать компьютер - так надежнее.
Но это по-прежнему никак не мешает испортить память без всяких неизвестных исключений.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560046
locked
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
super-codelocked, только что создал новый сайт на iis 7. Страница на asp.net (.net 4.0) при загрузке ждет 3 секунды (sleep), потом бросает исключение.

Следил за кол-вом процессов. Оно - 39, как до запуска страницы, так во время работы, так и после.
Процессов новых не появлялось, все выполняется там же. Осталось понять, что вы подразумеваете под виртуальной машиной (vmware) тоже не запустился?

я имел ввиду "виртуальная машина .NET"
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560058
super-code
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
locked, "виртуальная машина .net" работает внутри процесса. Например, с каждым новым процессом на .net появляется свой сборщик мусора для этого процесса. Т.е. IIS в своем процессе запустил мой код на .net, перехватил неизвестное исключение, и продолжает работать.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560064
locked
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
super-codelocked, "виртуальная машина .net" работает внутри процесса. Например, с каждым новым процессом на .net появляется свой сборщик мусора для этого процесса. Т.е. IIS в своем процессе запустил мой код на .net, перехватил неизвестное исключение, и продолжает работать.
Твой "код на .NET" это IL код который интерпретируется "виртуальной машиной .NET" и твои эксепшены в нем никак не связаны с реальными эксепшенами IIS процесса.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560068
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer0. Отпустить прибережённый для этой цели резерв
1. Гробануть обработку конкретного запроса, если этого не случилось в ходе разматывания стека
2. Если после этого памяти стало нормально, продолжить работу, опционально настучав по голове автору запроса на тему "поумерь аппетиты"
3. Если после этого памяти останется мало, сбросить всяческие кэши и подрезать параметры типа "максимальный размер", "максимум одновременно работающих" итп.
4. Когда памяти станет нормально, не забыть снова выделить аварийный буфер
5. Если пункт 3 начинает повторяться с надоедливым постоянством, написать разработчикам "поднимите свои задницы и ищите, где утечка памяти, пока я совсем не сдох", улучшить момент и перезапуститься
Нет такой практики. Держать резервы.

По поводу настучать по голове автору - полностью согласен. Но это уже после краша приложения.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560070
super-code
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
locked, что значит никак не связаны?
1. Процесс тот же? - тот же;
2. Exception был? - был;
3. Его кто-то обработал или процесс убал? - нет процесс не упал, exception обработан.
4. Мы его в своем коде обратывали? - нет, его обработал iis и среда .net. Вот он ответ на твой вопрос.

Или ты считаешь, как-то по другому?

Если я на той же странице сделаю бесконечную рекурсию, то получится exception - stack overflow. Тогда весь процесс iis упадет, и это будет видно в логах windows.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560072
super-code
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonНет такой практики. Держать резервы.
Ты просто тему про хвостики в массивах не читал :D
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560075
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
super-codemaytonНет такой практики. Держать резервы.
Ты просто тему про хвостики в массивах не читал :D
Это в каком языке/технологии?
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560084
super-code
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton, первоисточник найти не смог, но продолжение тут
http://www.gamedev.ru/flame/forum/?id=122958
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560106
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
super-codemayton, я с Вами согласен. Существуют ситуации, когда надо обрабатывать любое исключение, а существуют, когда не надо. И это вопрос архитектуры. Но Вася Уткин уверен, что подход настоящего джедая один - не обрабатывать неизвестные исключения и код вида:
Вот это вы уже сами придумали.

super-codeЕсли единственный аргумент не перехватывать неизвестные исключения - это возможная порча памяти. Так я открою вам глаза - в windows можно записать данные и в память чужого процесса.
И как же это сделать без разделяемой памяти и привилегий?
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560109
super-code
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вася Уткин, программу ArtMoney видел?
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560130
super-code
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вася УткинВот это вы уже сами придумали.

Я заявил, что бывают ситуации, когда стоит обработать неизвестное исключение и НЕ бросать его далее наружу, привел, как пример - веб-сервис. Ты мне ответил:
Вася Уткин...неизвестное исключение/код возврата. В этом случае предполагается худший вариант - невозможно.
Но идут всегда на компромисс, просто все потоки и подключения изначально поделены между несколькими процессами с изолированной памятью, и падает только один из процессов. Лучше если 10% соединений передподключатся, чем вместо 1 000 спишется 1 000 000 руб в биллинге.

Я из этой фразы сделал вывод, что ты со мной не согласен, и считаешь, что никогда не следует обрабатывать неизвестное исключение. Или я неверный вывод сделал, и ты не согласен, только с моим примером?
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560136
super-code
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
super-code, как пример, я привел - веб-СЕРВЕР, опечатка.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560140
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вася Уткин super-codeЕсли единственный аргумент не перехватывать неизвестные исключения - это возможная порча памяти. Так я открою вам глаза - в windows можно записать данные и в память чужого процесса.
И как же это сделать без разделяемой памяти и привилегий ?
super-codeВася Уткин, программу ArtMoney видел?
http://www.artmoney.ru/manual/russian/faq.htm апустить программу ArtMoney Pro через контекстное меню "Запустить от имени Администратора " ( в английской версии "Run As Administrator " )
Бурная у тебя фантазия, мало того, что у тебя внешние процедуры запускаются не в отдельном заранее созданном процессе, так ещё и с правами администратора. Зачем тогда по твоему вообще процессы были созданы, жизнь усложнить?
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560150
super-code
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вася Уткин, про права я тебе ничего не говорил. Кто тебе гарантирует, что твой сервис у заказчика работает не от имени администратора? или соседний сервис.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560176
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
super-codemayton, первоисточник найти не смог, но продолжение тут
http://www.gamedev.ru/flame/forum/?id=122958
Сходу многобукв. И тема какая-то стрёмная. Хвостики какие-то. Сходу если это суть
- перегрузка аллокатора то неинтересно. Да и накладно как-то...

Хотя почитаю. Возможно стоит и отдельную ветку поднять.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560190
super-code
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton, не, это не серьезно все.
Суть такова: один товарищ очень активно доказывал, что если вам нужен статический массив на 100 элементов, выделите массив на 120 (20 - хвостик). И когда вы ошибетесь в границах массива, ваше приложение не упадет... Ему сначала объясняли, а потом все согласились с ним и долго друг друга стебали, при любой непонятной ошибки, что нужно было использовать хвостики в массивах.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560194
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНет такой практики. Держать резервы.
В яве это уже и не сказать чтобы критично, скорее для порядка упомянул. Там и так прорва всего, что можно освободить и что освободится автоматически в результате размотки стека.

maytonПо поводу настучать по голове автору - полностью согласен. Но это уже после краша приложения.
Ну это как хотите. Думаю, я показал, что в ситуации таки можно кое-что сделать, хотя нарисовано сходу и список явно неполный.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560197
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему накинул 20% ? Почему не 1% или 200% ? Какой вобще в этом есть научный метод?
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560211
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И потом. Этож ошибку в софте не устраняет. Это просто ее скрывает от разработчика и надолго.
Делал процессинг 1000 элементов. Суммы средие почсчитал там.. аналитику. Софт учёл 1001 элемент. Ошибку доступа
не выдал. Ты доволен. А аналитика - не та. Ну не то чтобы совсем не та. Но чуть-чуть другая.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560221
super-code
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton, в этом и была суть всего смеха.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560257
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
super-codeВася Уткин, про права я тебе ничего не говорил. Кто тебе гарантирует, что твой сервис у заказчика работает не от имени администратора ? или соседний сервис.
Внезапно! Администратор. Который пришел на замену уволенному - известно по какой причине.
На системах, где считаются деньги или содержится конфиденциальная информация недопустимо запускать сервисы/приложения под Администратором ровно так же, как и устанавливать например Perform Volume Maintenance.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560264
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerВы так смешно говорите, словно вызываемый любезно возвращает специальную ошибку, "господа, я насрал вам в оперативку" :)Да, такая ошибка была бы весьма полезной.

С точки зрения разработчика СУБД, случаи "кинул исключение и наверное нагадил в оперативку" и "кинул исключение, но скорее всего не нагадил" отличаются очень просто. Модуль от обычного апп-девелопера наверное нагадил, наш модуль или модуль из другой хорошей библиотеки или СУБД скорее всего отработал чисто.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560468
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТы доволен. А аналитика - не та. Ну не то чтобы совсем не та. Но чуть-чуть другая.
Первое, чему меня учили в аналитике - что трепетное олтп-шное отношение к корректности каждой строчки можно забыть, посчитать аналитику по 990, откинув 10 инвалидов - несравнимо лучше, чем из-за инвалидов отказаться считать всю тысячу.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560472
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ruС точки зрения разработчика СУБД, случаи "кинул исключение и наверное нагадил в оперативку" и "кинул исключение, но скорее всего не нагадил" отличаются очень просто.
В любом случае, наибольший интерес представляет вариант "нагадил, гад, и не кинул никакого исключения".
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560526
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarermaytonТы доволен. А аналитика - не та. Ну не то чтобы совсем не та. Но чуть-чуть другая.
Первое, чему меня учили в аналитике - что трепетное олтп-шное отношение к корректности каждой строчки можно забыть, посчитать аналитику по 990, откинув 10 инвалидов - несравнимо лучше, чем из-за инвалидов отказаться считать всю тысячу.У меня сегодня запрос от юзера --- можно ли "отредактировать" контроль данных, чтобы география перестала ругаться на точки с широтой больше 90 и меньше минус 90, но продолжала ругаться на точки с широтой больше 97 и меньше минус 97 :) Бедолаги раскладывают данные на три кучки: приличные, полное гэ и гэ частичное.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560673
super-code
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вася Уткинsuper-codeВася Уткин, про права я тебе ничего не говорил. Кто тебе гарантирует, что твой сервис у заказчика работает не от имени администратора ? или соседний сервис.
Внезапно! Администратор. Который пришел на замену уволенному - известно по какой причине.
На системах, где считаются деньги или содержится конфиденциальная информация недопустимо запускать сервисы/приложения под Администратором ровно так же, как и устанавливать например Perform Volume Maintenance.

Да причем тут деньги? Я тебе привел пример - веб-сервер, он может не только деньги считать, если что, и будет лучше если он не будет падать от неизвестного ему исключения в дочерним плагине написанном на управляемом языке.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560824
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вася УткинНо идут всегда на компромисс, просто все потоки и подключения изначально поделены между несколькими процессами с изолированной памятью, и падает только один из процессов . Лучше если 10% соединений передподключатся, чем вместо 1 000 спишется 1 000 000 руб в биллинге.

super-codeВася Уткинпропущено...

Внезапно! Администратор. Который пришел на замену уволенному - известно по какой причине.
На системах, где считаются деньги или содержится конфиденциальная информация недопустимо запускать сервисы/приложения под Администратором ровно так же, как и устанавливать например Perform Volume Maintenance.

Да причем тут деньги? Я тебе привел пример - веб-сервер, он может не только деньги считать, если что, и будет лучше если он не будет падать от неизвестного ему исключения в дочерним плагине написанном на управляемом языке.
А веб-сервер и не будет падать если исключение произойдет в отдельном процессе "в дочерним плагине написанном на управляемом языке", а упадет и перезапустится только этот отдельный процесс и переподключатся соединения его использующие в данный момент.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38560948
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_rusoftwarerпропущено...

Первое, чему меня учили в аналитике - что трепетное олтп-шное отношение к корректности каждой строчки можно забыть, посчитать аналитику по 990, откинув 10 инвалидов - несравнимо лучше, чем из-за инвалидов отказаться считать всю тысячу.У меня сегодня запрос от юзера --- можно ли "отредактировать" контроль данных, чтобы география перестала ругаться на точки с широтой больше 90 и меньше минус 90, но продолжала ругаться на точки с широтой больше 97 и меньше минус 97 :) Бедолаги раскладывают данные на три кучки: приличные, полное гэ и гэ частичное.
Спроси как они поступают с углами от 90 до 97. Просто интерсно
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38561097
super-code
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вася УткинА веб-сервер и не будет падать если исключение произойдет в отдельном процессе "в дочерним плагине написанном на управляемом языке", а упадет и перезапустится только этот отдельный процесс и переподключатся соединения его использующие в данный момент.

IIS в windows работает по другому. Доказательства приводил. Но Вася, конечно, знает лучше, чем галимый Microsoft как надо писать.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38561136
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytoniv_an_ruпропущено...
У меня сегодня запрос от юзера --- можно ли "отредактировать" контроль данных, чтобы география перестала ругаться на точки с широтой больше 90 и меньше минус 90, но продолжала ругаться на точки с широтой больше 97 и меньше минус 97 :) Бедолаги раскладывают данные на три кучки: приличные, полное гэ и гэ частичное.
Спроси как они поступают с углами от 90 до 97. Просто интерсно Разобрался уже. У них кроме реальных данных есть сколько-то bounding box--ов, вычисленных для дуг по приближённым алгоритмам. Формально утверждение "широты всех точек данных фигур лежат в диапазоне от 70 до 97" ничем не менее правильно, чем утверждение "... от 70 до 90". Ещё там ненулевое количество ошибок округления вокруг полюсов и ошибок, связанных с вычислением дуг на сфере вместо вычислением дуг на геоиде. Эти два сорта они вроде как умеют различать и частично исправлять, выясняя сначала, какие источники по каким причинам и какими способами косячат.
...
Рейтинг: 0 / 0
Когда подавлять исключения а когда пропускать?
    #38727116
dzen_tiur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще, и у экзепшнов, и у возвращаемых значений две цели:
1) сигнализация об ошибках для разработчиков
2) сигнализация об ошибках для самой программы

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

Ошибки для программы должны обрабатываться всегда. Иначе нет уверенности в том, что ваша программа что-то сделала, а что-то не сделала.

Т.е. когда выполняется строчка кода, сам факт того, что до неё дошло исполнение должен свидетельствовать о целостности, и безошибочности всего, что нужно этой строчке кода. Или, по крайней мере всё, что необходимо, должно тут же проверяться.
Иначе результат работы этой строчки кода будет даже хуже чем ошибочен - не определён.

Я придерживаюсь мнения, что весь код в программе должен определённо работать, а не на удачу.

Код должен работать, или не работать фактически, а не статистически.

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

Проигнорировать результат проверки вы всегда успеете.

А вот месяцами и годами искать в крупном корпоративном продукте источник редких ошибок - это верный результат отношения к ошибкам: "рано или поздно всё равно отладится".
...
Рейтинг: 0 / 0
69 сообщений из 69, показаны все 3 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Когда подавлять исключения а когда пропускать?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]