170 похожих чатов

Народ, а есть ли в С++ компиляторах нечто вроде локальных

санитайзеров ошибки которых можно поймать try-catch блоком? Я хочу например аттрибутом на try-catch блоке обозначить тип санитайзера и потом словить ошибку в catch-блоке
[[sanitizer(address)]]
try {
someBuggyFunction();
} catch(AddressSanitizerError err){
log(err);
someCleanup();
}
И С++ компилятор должен санитайзить только тот код которых находится внутри только этого try-блока (и всех вызываемых из него функций, но не всего бинарника)

19 ответов

29 просмотров

По идее можно вынести этот код в отдельную либу и скомпилить с санитайзером

Нет. Санитайзеры не обязаны юзать С++ исключения

Evgeniy Partizan
По идее можно вынести этот код в отдельную либу и ...

есть такая фича Conditional Compilation with __has_feature(address_sanitizer) In some cases one may need to execute different code depending on whether AddressSanitizer is enabled. __has_feature can be used for this purpose.

Богдан- Автор вопроса

Зачем это собственно надо - идея заключается в том что есть например бэкенд-фреймворк который оттестирован, без UB и т.д и есть всякие джуниор С++ разработчики которые будут писать бизнес-логику (зачастую без тестов) под этот фреймворк и у которых может довольно часто втречаться UB. И для того чтобы ошибка из-за UB в коде при обработке конкретного API-запроса не валила весь процесс с бэкендом то хочется завернуть обработку запросов вот таким try-catch блоком с санитайзингом но только того кода бизнес-логики которого будут писать джуниор-разработчики Подобное можно сделать и сейчас если вынести весь код бизнес-логики в отдельный бинарник (в котором код будет скомпилирован с включенным санитайзингом) и дальше бэкенд-фреймворк на каждый API запрос запускать этот бинарник в отдельном процессе операционной системы и дальше ловить ошибку санитайзеров стандартными средствами но это очевидно будет достаточно неэффективное решение

Conditional Compilation with __has_feature(address_sanitizer)

Богдан
Зачем это собственно надо - идея заключается в том...

что бы код модифицировать по минимуму и проверить конкретную фичу

Богдан
Зачем это собственно надо - идея заключается в том...

что бы код модифицировать по минимуму, и проверить конкретную фичу в естественных условиях

Богдан
Зачем это собственно надо - идея заключается в том...

Нет никакой гарантии, что после отловленного и предотвращённого UB программа останется в валидном состоянии.

Богдан- Автор вопроса
Alexander Karaev
Нет никакой гарантии, что после отловленного и пре...

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

Богдан
Гарантии нет если код бизнес-логики может свободно...

Ну попробуй ловить сигналы, которыми санитайзер обычно прибивает процесс после срабатывания

Богдан
Зачем это собственно надо - идея заключается в том...

как я понимаю с тем как работает асан его нельзя отключить для секции кода

feedable
как я понимаю с тем как работает асан его нельзя о...

ОП под локальностью понимает не отключение санитайзера для части кода, а восстановление после обнаружения UB

После того как санитайзер упал продолжать исполнение так себе идея. Не понятно что там сломалось в памяти

Богдан- Автор вопроса
Alex Noname
После того как санитайзер упал продолжать исполнен...

А что там может сломаться? По идее санитайзеры просто добавляют рантайм проверки и останавливают всю программу если они не сработали А дальше можно попробовать мысленно представить что будет если вместо остановки будет просто выброс исключения (с соотвествующим вызовом деструкторов и выходом наверх по калл-стеку пока не дойдем до catch-блока) - программа находится в валидном состоянии потому что до UB дело не дошло.

Богдан
А что там может сломаться? По идее санитайзеры про...

Ага, например проезд по памяти который покораптил пол строки, а потом все упало, когда он обратился к памяти за ее концом

Богдан
А что там может сломаться? По идее санитайзеры про...

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

Гражданин Котейко
санитайзер может сработать в местах, которые в ост...

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

Vitalii
Слушай, я не очень понимаю что-то в санитайзерах, ...

Разве нельзя было бы на этапе компиляции с санитайзером проверить изменил ли он переменные выше скоупом, чтобы выбрасывать просто разные исключения. Ведь если он не изменил состояние переменных, которые ещё будут использоваться, то всё хорошо.

Богдан
Гарантии нет если код бизнес-логики может свободно...

Ну и фантазия у тебя, может тебе лучше книги писать, по типу Филипа Дика?

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта