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

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

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

19 ответов

11 просмотров

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

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

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
Слушай, я не очень понимаю что-то в санитайзерах, ...

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

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

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

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

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

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
49
читать файл максимально быстро? странный вопрос))
zamtmn
53
How to create an OS in C? what to study?
Linus
18
Всем доброго вечера! Хочу поделиться своим злоключением с человеком, который, как оказалось сюда тоже скидывал свое резюме. Жаль, что я вашу группу не нашел раньше… человек ки...
Роман Ахмедзянов
4
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
Компания Elif ищет менеджера проектов, который будет заниматься поиском и ведением новых проектов. Прежде чем приступить к работе, вам нужно пройти наш недельный курс, где вы ...
Elif
5
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
11
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
@HemulGM Параметры у AddStream поменялись? Несостыковка какая-то
Катерина Свиридова
12
Народ, с прошедшими и наступающими. Ща полную ересь прогоню, но фишка в том, что это не обычная алкогольная ересь Либера, а я реально хз что делать. Сайт с 2012-го года Косяк...
Alexey Liber
2
Карта сайта