Думать? Хотя не, это точно не вариант
Я бы отказался от такого варианта
Оно и видно... Тесты не имеют отношения к допустимым ошибкам в рантайме (вроде неверного пользовательского ввода). Ассерты - тем более
Создать искусственное место, где ошибку можно проанализировать, не?
Ок, память не выделилась, "ошибку" нашли. Чинить невозможно - увольняемся
Вот это кстати вообще прекрасно, учитывая что в релиз-билд ассерт не попадает...
Ну разные ассерты бывают, можно и свой написать с логированием и завершением программы
Справедливо. Но вернёмся к OOM. Логирование требует аллокацию сообщения. А как это сделать, если памяти нет?) Или надо записать инфу в файл, а у нас экспешн из-за того, что жёсткий диск с данными отвалился физически. Куда логировать?)
В системный журнал, если есть такая возможность
Если такие проблемы с памятью, то никуда, хотя кажется мне, что можно на месте освободить какую-то память, чтобы залогировать. Пользователь что ли будет сидеть над зависшим приложением, потому что вы обрабатываете эксешпен от нью? Ну нет памяти, что дальше? Ждать пока появится?
Вот представь себе твою любимую IDE, ты пытаешься открыть окно с настройками, а у тебя закончилась память, окошко не аллоцировалось, эксепшн от new не отловился и всё IDE упало, включая последние три минуты работы, где ты написал самый гениальный код в своей жизни, а автосохранение стоит с интервалом в 5 минут, то есть, гениальный код утерян. А могло быть просто, что даже с пустым try-catch эксепшн отловился и окошко тупо не создалось, при этом всё приложение не упало. Более того, возможны по мере раскручивания стека ещё и чуть-чуть памяти освободилось из-за вызванных деструкторов, и можно вывести сообщение об OOM.
Под завершением имелось введу не terminate, все деструкторы отработают, среди которых и будет где-то там то сохранение файла. Ситуация, когда нельзя создать окно это критическая ситуация для иде, нельзя дальше продолжать работу, сейчас нельзя создать окно, через 5 минут нельзя будет сохранить данные
Вопрос очень тонкий: а падать ли, скажем, если не удалось сохранить файл?)
Ситуация критичная, да. Поэтому падать нельзя! Может я пока оставлю всё как есть, а сам сбегаю за бумажкой и ручкой и быстро перепишу код с экрана на бумажку! Это ведь самый лучший код в моей жизни! Его потеря смерти подобна! А вообще, сколько боли было у студентов, когда диплом уничтожался почти весь после бессонной ночи из-за вот таких вот багов? Пожалейте студентов, пишите правильное и хорошее ПО)
Зависит от причины, можно предложить пользователю выбрать другую директорию в случае проблем с какими-то правами/местом
Я говорю о реальных ситуациях, пользователь скорее всего начнет спамить открытие окна, когда оно не откроется после первой попытки, потом начнет спамить мышкой по приложению, когда оно зависнет, потом его убьет система и ничего уже точно не будет сохранено
CTRL+S каждые 2 секунды, чего сложного
Под кнопку S попала чипсинка и она не нажимается.
вешаем автосохранение на... любое событие с клавы
Чтобы (в обычной ситуации) заскочивший на клаву кот уничтожил мой прекрасный код?
окей. доббавим к автосохранению коммит. и пуш
Ну, тут мне уже нечего возразить) Только пуш лучше убрать, всё же, а при закрытии IDE настроить автосквош.
мало ли твой прекрасный кот уничтожит твой прекрасный комп?
Не, он не настолько жирный.
но умеет писать
Нет, он умеет только галопом скакать по клавиатуре
окей. комп может быть уничтожен. метиорит в окно залетел.
Тогда код последнее, что меня волнует. Надо кота спасать!
Ну пусть умирает тогда, кто вообще не делает бэкапы свой работы.
>А как это сделать, если памяти нет?) Юзерспейсные обработчики нехватки памяти реагируют чуть заранее - когда память еще есть
Обсуждают сегодня