metaclass (metaclass) wrote,
metaclass
metaclass

Rant: про обработку ошибок

Если бы вы знали, как меня заебали идиоты, которые не хотят обрабатывать ошибки.
Каждый божий день под руки попадается софт, в котором типичный способ обработки ошибок выглядит так:
try{
//инициалиация ебового окружения с десятками зависимостей от других софтов
}catch{
MessageBox("У нас что-то наебнулось. Все плохо.");
}

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

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

С автором одного такого поделия пытался обсудить вопрос показа сообщения об ошибке более подробно. Весь ответ был "мой софт работает идеально, ошибки пользователи видеть не хотят, а вы должны ставить строго по инструкции, тогда все будет работать".

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

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

Или вот еще - баг в libusb. Возникает только при сочетании следующих условий: винда+отладочный билд+явная передача контекста(работа с несколькими устройствами в одном процессе)+вызов операций из разных потоков. Баг заключается в том, что вызов операции отмены io не из того потока в котором io начиналось, вызывает в отладочной версии запись warning. Этот warning использует ссылку на контекст в глобальной переменной, чтобы определить, включен ли вывод в лог. При этом - эта переменная инициализируется только в случае, если контекст явно не передается. Если передается - то в переменной null и вывод warning вызывает NPE, убивая софт на корню. Т.е. обработка ошибок вызывает сама ошибки. За это вообще нужно голову отрезать.
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 84 comments