
Michael
04.04.2017
09:42:38
и вывести эксепшн
если доживу

Tema
04.04.2017
09:42:49

Michael
04.04.2017
09:44:14

Google

Michael
04.04.2017
09:44:26
во-первых, крашатся все
сейфовый код занимает ОЧЕНЬ много эффорта
проще использовать ассерты в подозрительных местах и крашиться заблаговременно
это тоже информативная ошибка
единственное что не должно крашиться - это какой-то риалтайм расчитанный на длительную работу в цикле
он может спастись
а ваншотным программам зачем это? они ж ничегго не попортят, слава виртуальной памяти

Tema
04.04.2017
09:46:06

desu
04.04.2017
09:46:45
У меня тут есть многопоточная прога. Она когда закрывается каждый раз в разном месте крашится

Michael
04.04.2017
09:47:00
мхех тру стори
но это очень просто решается

/dev
04.04.2017
09:47:16

Tema
04.04.2017
09:47:26

desu
04.04.2017
09:47:31
Я искал искал так ин не понял в чем дело

Google

Michael
04.04.2017
09:47:44
и да, ставишь флаг остановки и ждешь

Дед Пегас
04.04.2017
09:47:51
ПОтоки джинить нужно.

/dev
04.04.2017
09:47:53
Потом не крашнется, память испортит, и будешь как дурак баги искать

Дед Пегас
04.04.2017
09:47:57
Может, стоило заюзать трэд пул?

Michael
04.04.2017
09:48:22
приведенная Анатолием претензия ровно из этого разряда
там нечему выживать, если оно упадет - оно упадет с сегфолтом
конкретно этот фрагмент

/dev
04.04.2017
09:49:09

Tema
04.04.2017
09:49:20
ваще всегда

Michael
04.04.2017
09:49:26
можно!
но не стоит времени!
в этом мой аргумент

Tema
04.04.2017
09:49:36
да наверное

Michael
04.04.2017
09:49:38
в коммерческой разработке
если вылизываешь свой юбимый код - совсем другое дело
я-то свой любимый код вылижу и даже ловушки расставлю, но без фанатизма

babysitter
04.04.2017
09:50:22
оставлять возможность падения в сегфолт в коммерческой разработке? или я из контекста вырвал

Google

desu
04.04.2017
09:50:22
Там поток передачи по модбас поток отображения картинки поток передающий в разделяемую память..

Michael
04.04.2017
09:50:26
иногда то что должно упасть просто должно упатсть

/dev
04.04.2017
09:50:29

Michael
04.04.2017
09:50:37
единственное что не должно крашиться - это какой-то риалтайм расчитанный на длительную работу в цикле
он может спастись
а ваншотным программам зачем это? они ж ничегго не попортят, слава виртуальной памяти

desu
04.04.2017
09:50:55
И куча какихто таймеров

Michael
04.04.2017
09:50:57
сегфолт в ваншотной программе не имеет значения

Anatoly
04.04.2017
09:51:00
просто есть такая вещь как культура программирования: типа не могу я просто так оставить голый указатель, если есть потенциальный выброс исключения

Michael
04.04.2017
09:51:02
ей незачем спасаться
максимум, чтобы вывести ошибку
но это проще сделать ассертом, если знаешь, в чем будет ошибка
это значительноо продуктивнее
я не плюсовик, но мне кажется, это из разряда здравого смысла

desu
04.04.2017
09:52:35
И ошибка в духе вот ассемблерный код пару строк вот тут мы тютю

Michael
04.04.2017
09:52:52
ошибка в духе вот такая строка ассерт фейлд
и все понятно сразу

desu
04.04.2017
09:53:16
Корруптед

Michael
04.04.2017
09:53:54

Google

/dev
04.04.2017
09:54:06

Michael
04.04.2017
09:54:21
мне просто сложно рассуждать об этом в пределах моего хобби потому что меня оно устраивает "как есть", мне нужен результат, и это не массовый продукт
конечно, я бы значительно больше задумывался об этом в реальном проекте

desu
04.04.2017
09:54:53

Anatoly
04.04.2017
09:55:38
в конечном итоге следование определенной культуре (правилам) ускоряет поиск проблем в не только реальном, но в одноразовом проекте

/dev
04.04.2017
09:55:45

Artem
04.04.2017
09:56:00
ты пишешь, условно, скрипт на плюсах, и ожидаешь от плюсов того же, чего привык ожидать от скриптовых языков - понятных прогнозируемых падений в исключительных ситуациях

Anatoly
04.04.2017
09:56:03
но это все лирика, каждый учится на своих ошибках :D

Artem
04.04.2017
09:56:09
Но плюсы так не работают.

Michael
04.04.2017
09:56:27
и никак иначе...

/dev
04.04.2017
09:56:40

Michael
04.04.2017
09:56:52
мне сложно рассуджать о культуре плюсов конкретно, пока я не провел с ними хотя бы пару месяцев

Anatoly
04.04.2017
09:57:45

Michael
04.04.2017
09:58:05
умение предугадыавть ошибки и подстелить сена - это исключительно опыт
так же как и обратная сторона, понимание где подстилать не нужно
я конечно пока что полностью этого лишен
@anatolijs дай, пожалуйста, пример кода, как бы ты защитил такой кусок
size_t outSize;
uint8_t *buffer;
mrb_dump_irep(mrb, irep, 0, &buffer, &outSize);
char *p = (char *)buffer;
char_vector_t out(p, p + outSize);
mrb_free(mrb, buffer);
mrb_close(mrb);
return out;

Google

Michael
04.04.2017
10:00:30
вот это было реально полезным финальным аккордом в обсуждении

/dev
04.04.2017
10:00:59

Anatoly
04.04.2017
10:01:00
а mrb как определен?

Michael
04.04.2017
10:01:21
mrb_state*

Aleksei
04.04.2017
10:02:00

Michael
04.04.2017
10:02:09
да, это так

Stanislav
04.04.2017
10:02:18

Michael
04.04.2017
10:02:20
но Анатолий же сейчас говорит о НЕПРЕДВИДЕННОМ

Artem
04.04.2017
10:02:45
ну так главное тут обработать код ошибки mrb_dump_irep

Aleksei
04.04.2017
10:03:58
Если ему не удалось выделить память, то дальше при создании вектора ( не знаю, что за тип) может быть исключение

Artem
04.04.2017
10:04:12
еще если mrb открывается вне функции, то и закрывать его надо вне функции, не надо такого рода менеджмент вносить внутрь обработчика

Michael
04.04.2017
10:04:42
он открывается в функции
черт, мне нужен экстеншн вс для гиста, щас поставлю
поставил
https://gist.github.com/micktu/946460a2a30ce74df57d1d85767356ca
вот вся функция

Anatoly
04.04.2017
10:08:40
ну, хотя бы на коленках defer:
size_t outSize = 0;
uint8_t *buffer = nullptr;
mrb_state* mrb = nullptr;
mrb_dump_irep(mrb, irep, 0, &buffer, &outSize);
std::unique_ptr < mrb_state, std::function<void(mrb_state*)» holder(mrb, [](mrb_state*mrb) {
mrb_close(mrb);
});
std::unique_ptr < uint8_t, std::function<void(uint8_t*)» holder(buffer, [&mbr](uint8_t *buffer) {
mrb_free(mrb, buffer);
});
char *p = (char *)buffer;
char_vector_t out(p, p + outSize);

Michael
04.04.2017
10:09:09
сколько боли
вы привыкли к этой бесчеловечности?

Anatoly
04.04.2017
10:09:32
ну, во всяком случае все твои динамические ресурсы защищены
по хорошему надо было просто обертку на mbr_state написать и все