- 1
std::set_unexpected( [] () {} );
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+14
std::set_unexpected( [] () {} );
Студия достала и не позволяла обрабатывать исключения, а они нужны были для демонстрации работы, в итоге навесил такой костыль и включил SEH исключения в параметрах компиляции.
LispGovno 29.05.2013 20:41 # 0
maksim_ovcharik 29.05.2013 20:50 # 0
LispGovno 29.05.2013 20:53 # 0
maksim_ovcharik 29.05.2013 20:57 # 0
LispGovno 29.05.2013 21:12 # +1
bormand 29.05.2013 20:58 # +1
maksim_ovcharik 29.05.2013 21:00 # 0
bormand 29.05.2013 21:04 # +1
P.S. А зачем программе намеренно устраивать access violation?
LispGovno 29.05.2013 21:11 # +1
Не транслирует. Ты перепутал с Borland C++ Builder
bormand 29.05.2013 21:19 # +1
TarasB 30.05.2013 10:11 # +1
defecate-plusplus 30.05.2013 10:14 # +3
roman-kashitsyn 30.05.2013 10:36 # +3
bormand 30.05.2013 10:30 # +2
Трансляция остальных ошибок в исключения - implementation defined.
TarasB 30.05.2013 11:40 # 0
defecate-plusplus 30.05.2013 11:50 # +3
приложение работает как умеет - даже если оно однопоточное - и выглядит как последовательность инструкций
приложению приходит прерывание/сигнал, значит, основной поток приостанавливается на какой то своей инструкции, приложение обрабатывает сигнал, после обработки основной поток может продолжиться
если обработка сигнала подразумевает кончину - особенно, когда это происходит по умолчанию - никому не будет дела до того, что там происходит в основном потоке
т.е. если ты выделял память, захватывал ресурсы и открывал устройства, то операционная система за тебя это всё подчистит
если ты писал в свой файл и недописал, то файл закроется в том состоянии, в котором основной поток его оставил
это в общих словах
TarasB 30.05.2013 12:11 # 0
defecate-plusplus 30.05.2013 12:49 # +2
везде рекомендуется из своего обработчика SIGFPE завершать процесс, иначе никто ничего не гарантирует
если его заигнорить, то скорее всего программа впадет в бесконечный цикл, т.к. деление на ноль на текущей инструкции будет происходить снова и снова
вроде бы отдельными телодвижениями можно получить user context в обработчике и сдвинуть instruction pointer, но я такого никогда не делал и воспроизводить, если честно, не очень интересно
bormand 30.05.2013 13:05 # +1
defecate-plusplus 30.05.2013 13:26 # +3
bormand 30.05.2013 11:54 # 0
maksim_ovcharik 29.05.2013 21:12 # 0
http://pastebin.com/cDQQ98fF
так же пробовал ловить через __try/__except, на сколько я понял они именно для этих целей созданы, в итоге получал предупреждение при компиляции и тоже самое при отлове.
LispGovno 29.05.2013 21:21 # 0
std::set_unexpected( [] () {throw THuinyaException;} ); чтобы потом обычным трай кечем поймать?
maksim_ovcharik 29.05.2013 21:24 # 0
LispGovno 29.05.2013 21:29 # +2
PS: вспомнил правильное название:_set_se_translator
bormand 29.05.2013 21:37 # +3
Если случился AV (обращение за границы стека, кучи, попытка прыжка в неисполняемую память и т.п.) - в проге явно что-то пошло не так, и исправить этот НЁХ программными средствами уже практически невозможно.
Вторая проблема поимки AV - оно совсем не гарантированно. Биты доступа расставляются на уровне страничек, не байтов. Поэтому прога может спокойно копаться в невыделенных кусках кучи и даже чуть-чуть за ней, или выполнять код, лежащий неподалеку от границы реального кода, и при этом творить всякую хуйню не поймав AV.
P.S. Для лабы сойдет ;)
LispGovno 29.05.2013 21:41 # 0
bormand 29.05.2013 21:43 # +1
maksim_ovcharik 29.05.2013 21:47 # 0
upd: вашим, в смысле твоим и LispGovno
LispGovno 29.05.2013 22:06 # +7
Vindicar 29.05.2013 23:13 # 0
inkanus-gray 29.05.2013 23:22 # +4
roman-kashitsyn 29.05.2013 23:30 # +3
Yuuri 30.05.2013 10:08 # +5
roman-kashitsyn 30.05.2013 10:42 # +4
eth0 30.05.2013 17:49 # +2
Xom94ok 29.05.2013 21:31 # 0
Я бы сказал "продолжает ковылять в страну неопределенного поведения". [mode=Ванга]Небось, еще и все предупреждения компилятора отключены.[/mode] Фу-фу-фу!
an0nym 29.05.2013 23:46 # −8