metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2009-01-06 01:02 pm

Программистсткие комплексы

"Отладочные логи и вызовы профилировщика в код вставляют только трусы, неудачники и /забыл слово для тех, кто плохо работает из-за своей тупости/, которые не могут программу написать правильно и эффективно сразу".

[identity profile] 1ceheart.livejournal.com 2009-01-06 11:19 am (UTC)(link)
Кстати, для дров они сделали для WMI tracing специальную приблуду, которая при компиляции отладочные текстовые строки заменяет на некие ID, и в результате в бинарнике текста нет, и performance overhead значительно меньше - а все это ради того, чтобы дрова можно было релизить вместе с отладочной инфой, и если вдруг глюк, то чтобы кастомер мог прислать лог (естественно бинарный), а ты его мог распарсить. Это очень правильный подход. Я вот думаю, не сделать ли в своем проекте так же. Пока что у меня по кнопке "submit error report" на сервер тупо заливается последние 50 метров текстового лога, но это не очень эффективно :)

[identity profile] metaclass.livejournal.com 2009-01-06 11:23 am (UTC)(link)
Хм. Интересная идея. Правда у меня кроме статических строк там еще куча переменных параметров логгится, а вот для тупого лога всех вызовов в стиле "время начала, ID вызова, время завершения" такое бы очень хорошо подошло.

[identity profile] 1ceheart.livejournal.com 2009-01-06 11:26 am (UTC)(link)
А оно параметры тоже пихает. Оно парсит строку в формате printf, и соответственно генерит код (не знаю, как - макрос там или вызов чего-нибудь), который параметры тоже сохраняет. Но при этом время на генерацию собственно строки в рантайме не тратится.

[identity profile] vp.livejournal.com 2009-01-06 02:22 pm (UTC)(link)
класс идея, да!!!

[identity profile] kiryl.livejournal.com 2009-01-06 08:26 pm (UTC)(link)
Какую ересь только не придумают проприетарщаки.

[identity profile] metaclass.livejournal.com 2009-01-06 09:26 pm (UTC)(link)
А чего ересь, вполне себе идея для уменьшения нагрузки при логгинге.

[identity profile] kiryl.livejournal.com 2009-01-07 09:44 am (UTC)(link)
Простой текстовый лог намного удобней. Хотя бы потому, что не требуется сторонних средств для его расшифровки. Если волнует размер -- можно агрессивно пожать, например в lzma. Не думаю, что overhead на логинг может быть существенным.
Описанный подход может быть интересен, только для сокрытия информации, что бы людишки ни в коем случае не догадались как эта ентерпрайзная поделка работает.

[identity profile] metaclass.livejournal.com 2009-01-07 10:33 am (UTC)(link)
Если сервер хорошо нагружен, там лишний обмен с диском и расход проца на lzma однозначно ни к чему. Да и сокрытие информации тоже идея хорошая, каким-нибудь конкурентам или местным криворуким админам вовсе ни к чему знать подробности работы софта.

[identity profile] kiryl.livejournal.com 2009-01-07 12:46 pm (UTC)(link)
Лог, в нормальной ситуации, вряд ли привысит 1Mb/час. Даже на загруженном сервере это не создаст большой нагрузки. А жать можно только при пересылке или logrotate.
И, да, я всегда догадывался, что проприетарщики считают всех вокруг тупыми.

[identity profile] metaclass.livejournal.com 2009-01-07 01:46 pm (UTC)(link)
1 мегабайт в час?
А 100 кб в секунду не хотите ли при отладке, причем отладка именно производительности, т.е. логгинг должен отъедать как можно меньше, чтобы не повлиять на отлаживаемый аспект системы.

[identity profile] kiryl.livejournal.com 2009-01-07 02:43 pm (UTC)(link)
Я полагаю, вы не производите отладку на стороне клиета? Или производите?
"Отладка производительности" -- это профайлинг? Для этого существуют более эффективные средства, чем логгинг.

[identity profile] 1ceheart.livejournal.com 2009-01-07 04:25 pm (UTC)(link)
При управлении железкой 10 мб лога в минуту - сплошь и рядом. Бывают и метры в секунду. Потому что когда в цеху встает конвейер, а на вопрос "что случилось" разработчики недоуменно разводят руками и говорят "ну знаете, нам надо посмотреть отладчиком", их немедленно увольняют.

[identity profile] 1ceheart.livejournal.com 2009-01-07 11:19 am (UTC)(link)
Если вы читали мой коммент внимательно, вы бы заметили, что там написано "для дров". Если в обработчике прерывания будет происходить printf и lzma, вы сильно удивитесь, что это у вас Core2 Duo окошки перерисовывает со скоростью 386.

Простой текстовый лог, конечно, удобней, но не всегда.

[identity profile] kiryl.livejournal.com 2009-01-07 12:39 pm (UTC)(link)
Если у вас обработчик прерывания настолько сложен, что требует логирования чего-либо кроме ошибок, то вы, очевидно, пишете что-то не правильно.

[identity profile] metaclass.livejournal.com 2009-01-07 01:45 pm (UTC)(link)
Вот про это я и написал "логи пишут только трусы и неудачники".
Потому что настоящие гуру и ковбои от программирования сразу пишут правильно, а причину проблем у клиента узнают с помощью телепатической силы.

[identity profile] kiryl.livejournal.com 2009-01-07 02:40 pm (UTC)(link)
В обработчике прерывания, если всё верно спроектировано верно, выполняется очень мало работы и отладить его не очень сложно.

[identity profile] 1ceheart.livejournal.com 2009-01-07 04:22 pm (UTC)(link)
А логи пишут только трусы и неудачники :)

[identity profile] blackyblack.livejournal.com 2009-01-10 08:02 am (UTC)(link)
Логи из обработчика прерывания не очень удачная идея. Да и этот самый бинарный лог тоже может навернуться - его кто будет анализировать?

[identity profile] 1ceheart.livejournal.com 2009-01-10 11:55 am (UTC)(link)
Не самая, но как-то отлаживать нужно. Breakpoint-то туда можно поставить только один раз по понятным причинам, а просто DbgPrint таки вносит коррективы :) Конечно, есть и плугин к kd, и если сказать /debugport=1394, то даже и с DbgPrint можно жить, но тем не менее.

Для слива и анализа бинарных логов они там дают тулзу. Все это довольно надежно работает, как ни странно.

Разумеется, оставлять даже бинарный лог в обработчике прерывания в релизе не сильно кошерно. Хотя некоторые оставляют, а некоторые даже это оговаривают в спецификации, что WMI tracing должен быть в релизе. Там действительно performance overhead очень маленький.

[identity profile] raydac.livejournal.com 2009-01-06 11:38 am (UTC)(link)
помню написал интерпретатор, на нем систему, а дебаггер писать было лень, всё отлаживал в уме и при помощи просмотра консольных сообщений и ничего так справился.. можно написать сразу конечно то что работает, но для этого надо время (как Дийкстра к примеру писал о компании где в годовом проекте начиналось программирование после 9-10 месяцев обдумывания), но кто же у нас даст время, у нас требуют за год догнать и перегнать конкурента который 10 лет упсешно на рынке работает

[identity profile] sergiej.livejournal.com 2009-01-06 01:01 pm (UTC)(link)
А я помню одного умельца, когда ему сказали повставлять вывод логов для дебага, он вставил везде "TODO output to debug log" :)

[identity profile] komarov.livejournal.com 2009-01-07 12:38 am (UTC)(link)
тому, кто такое говорит, хочу морду набить