LINUX.ORG.RU

AddressSanitizer GCC + custom halt

 


0

3

Всем привет,

Вопрос такой, допустим имеется многопоточная программка, в которой срабатывает ASan, завершая процесс с выводом ошибки.

Могу ли я внедриться в это событие и вызвать собственную функцию, которая бы могла допустим из контекста текущего потока получить интересуемую информацию и добавить ее в вывод санитайзера до того как процесс грохнется?


Ответ на: комментарий от sotlef

Во-первых оно валится в корку насколько я помню и уже её можно посмотреть(под виндовсами ман minidump).

Во-вторых, так а почему-бы не запускать тесты нагрузочные под отладчиком?

faq2
()
Ответ на: комментарий от annulen

Подробное логгирование под нагрузкой тормозит, кроме того объем логов может быть чудовищным.

Мы обычно вешаем обработчик на сегфолт, он хотя бы показывает где именно упало. Но это не панацея, самому стало интересно…

AntonI ★★★★
()

Так а продакшен сборке сделай свой подробный лог и все. А на тестовой сборке с санитайзерами если программа скрашилась, то нужно исправить проблему чтобы краша не было. Или ты без лога не можешь найти причину? Так а отладчик место не ловит разве?

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 2)
Ответ на: комментарий от sotlef

Попахивает тем, что вы просто логи не осилили:)

Если @AntonI делает всякую арифметику хитрую как я понял и ему ток штуки типа lttng помогут, то у тебя мне что-то подсказывает таки есть ввод/вывод(интересно, угадал?) куда-то кроме памяти, а значит правильно написанные логи критического пути без лишних сообщений, ну ооочень маловероятно затормозят твоё приложение если будут по человечьи написанны.

faq2
()
Последнее исправление: faq2 (всего исправлений: 2)
Ответ на: комментарий от faq2

Да блин а, ну почему когда спрашиваю конкретный вопрос, меня начинают учить как мне работу работать :-) После пуша изменений выполняется сборка, которая на отдельном сервере запускается специальным софтом, на вход поступают сотни запросов в секунду, если сервак завалится я хочу получить письмо, в котором будет вывод санитайзера с текстом HTTP запроса. Я не хочу парсить логи в поисках ошибок, приложение многопоточное, не известно какой из 100 параллельных запросов завалил процесс. Логи под нагрузкой даже в режиме нужной говорливости могут генерить файлы по 10Гб в час, а приложение может упасть и после 5 часов работы.

sotlef
() автор топика
Ответ на: комментарий от sotlef

почему когда спрашиваю конкретный вопрос, меня начинают учить как мне работу работать

Тут у всех синдром поиска XY-проблемы. А если серьёзно, то с lttng не должно быть проблем с производительностью и анализом больших логов, там специальный формат применяется, а пишет на диск отдельный демон

annulen ★★★★★
()
Ответ на: комментарий от annulen

Если серьезно, то выделенные сервера у нас дорогие. Компания сама продает в аренду другим подразделениям серваки, на которых мы контейнеры запускаем. Соответственно, чтобы от проекта больше денег оставалось в подразделении, диски приходится заказывать обычные и небольшого объема и под временные файлы там с гулькин нос места + iops лимиты. Конкретно для этой ситуации - логи ничего не дадут, так как в моделях используются аналитические правила, поведение системы целиком зависит от загруженной аналитической модели, анализируемых данных в ней и запроса пользователя. Если всю математику забивать логами, как тут все предлагают, то это просто кабздец какой-то будет.

sotlef
() автор топика
Ответ на: комментарий от sotlef

Всю не надо:-)

Вообще есть продвинутая техника логгирования, когда сообщения не пишутся а вешаются на стеке. При корректном выходе освобождаются, при некорректном выводится все что висит. Это позволяет сразу получать компактное описание проблемы, и это даже лучше чем корка - корка показывает состояние на момент падения, а тут видна предыстория.

В моем случае, когда тело цикла лёгкое а цикл длинный, это может тормозить. У Вас может и самое оно будет.

AntonI ★★★★
()
Последнее исправление: AntonI (всего исправлений: 1)
Ответ на: комментарий от sotlef

Да блин а, ну почему когда спрашиваю конкретный вопрос, меня начинают учить как мне работу работать :-)

Потому что ты не умеешь работать и это видно по твоим конкретным вопросам. wikipedia://xy problem

После пуша изменений выполняется сборка, которая на отдельном сервере запускается специальным софтом, на вход поступают сотни запросов в секунду, если сервак завалится я хочу получить письмо, в котором будет вывод санитайзера с текстом HTTP запроса. Я не хочу парсить логи в поисках ошибок, приложение многопоточное, не известно какой из 100 параллельных запросов завалил процесс. Логи под нагрузкой даже в режиме нужной говорливости могут генерить файлы по 10Гб в час, а приложение может упасть и после 5 часов работы.

Во-первых, все цифры что ты озвучил - копейки. Во-вторых, решение тебе уже сказали - после падения пишется корка, в корке есть всё что нужно. Хочешь - натрави на неё gdb скрипт который тебе и трейс и нужные переменные распечатает и пришли результат себе на мыло. Хочешь - пришли саму корку и спокойно отлаживай её в gdb локально.

slovazap ★★★★★
()
Ответ на: комментарий от slovazap

В убунте даже вроде были какие-то зачатки по централизации хранения корок, может там и послать понятно как?

Но чел ща скажет, что отладочная сборка замедляет нагрузочное тестирование, т.к. у них там аццкая производительность. Угу, а asan не замедляет :) Но мы не злые, мы скажем ему про возможность собрать оптимизированную версию с отладочной информацией.

faq2
()
Ответ на: комментарий от annulen

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

faq2
()
Ответ на: комментарий от sotlef

Если всю математику забивать логами, как тут все предлагают, то это просто кабздец какой-то будет.

Так я и говорю, не осилили:)

Логгировать нужно запрос или его идентификатор и статус завершения обработки. Если логи в этой ситуации ничего не дают, то как вы такое решение в прод то запускать хотите? Там оно под нагрузкой упадёт - а вы такие, не ну не будем же мы болтливый режим в проде включать, х3 почему упало? Ессно, тебе никто не предлагает писать логи в отладочном режиме в нагрузочном тесте, если это нужно отдельно проговаривать - считай проговорили :)

faq2
()
Ответ на: комментарий от faq2

Не всегда корки есть, на некоторых кластерах их скажем банально некуда класть - нэ лэзэ. Памяти на узле сотни Гб, свой диск на узле крошечный, СХД не резиновое, пропускная способность сети ограничена и вообще прямого входа на узел нет, только менеджер там задачи запускать умеет…

AntonI ★★★★
()