Свежие комментарии

Title Comment
И судя по всему - это

И судя по всему - это нисколько не мешало жить!

Хо-хо, тут через последний

Хо-хо, тут через последний clang прогнали FreeBSD и понаходили вот такого:

struct X { ... }

struct X *obj;

memset(obj, 0, sizeof(obj));

И это после многих лет жизни с gcc -Wall -Werror

1) - да, конечно. Я лишь про то, что до текущего года - виз

1) - да, конечно.

Я лишь про то, что до текущего года - визит в инспекцию предполагался, полностью перейти на почтовые/электронные сношения с инспекцией было невозможно по самой процедуре.
Сейчас это стало возможно по меньшей мере в теории - а на практике мешает именно это самое желание иметь копию декларации с печатью как замену 2-НДФЛ.

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

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

1) "Декларация с печатью" к порядку ведения/заверения КУДиР

1) "Декларация с печатью" к порядку ведения/заверения КУДиР ведь полюбому никак не относится, не так ли?

2) Я на всяк случай в этом году заверил, благо это 5 минут, а форма книги всё равно старая, место для подписи предполагается. Насчёт полностью электронной отчётности, кстати, ничего вроде не менялось - всё равно надо в конце года распечатывать, прошивать, подписывать и складывать в архив.

для С++ с его указателями гораздо полезнее valgrind, который

для С++ с его указателями гораздо полезнее valgrind, который может проверять очень многие вещи.
в целом, я скорее за статические анализаторы, ибо они дисциплинируют. ложные срабатывания можно отметить (а можно немного переписать код), но даже если 1 из 10 срабатываний не ложное, это хороший результат.
главное же средство борьбы с багами было и есть: простой и понятный код, покрытие тестами, грамотный логгинг, специальный дебаг режим с пред и постусловиями.

Ну собственно да нормальный цикл использования таких штук

Ну собственно да нормальный цикл использования таких штук это до/после компиляции или хук на коммит

Не. Я бы и эту не пробовал - но на меня надавили из diigiKam

Не.
Я бы и эту не пробовал - но на меня надавили из diigiKam (куда LibRaw импортится) - форвардили репорты, которые никуда не годные потому что кривые.

Ну я и решил сам попробовать - и мне не понравилось. Возможно, если перед каждой компиляцией это прогонять, то многие глупые опечатки будут половлены. А на оттестированном продукте сигнал-шум какой-то негодный получается.

а ты отечественный продукт, у них еще радуга в логотипе и мн

а ты отечественный продукт, у них еще радуга в логотипе и много постов на хабре, не пробовал? вроде не так плох

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

насчет того, что это шум я не согласен, если честно, это как миннимум плохой стиль.

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

Меж тем - этот самый

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

> Так ведь при тестировании

> Так ведь при тестировании все вылезет.

Вот конкретно в этом for-е и printf-е все как-то работало, цикл рвался внутри еще по одному условию, а в принт не приходили данные больше 32 бит, то есть ошибки увидел только с -Wall. Да, достаточно редкие ошибки, и у нас почти такая же история - есть чужие .h-файлы которые выдают кучу нелепых варнингов. Но с -Wall -pedantic пытаюсь собрать хотя бы раз в месяц, мало ли чего?

> Оно это ловит и правильно ловит, но с моей точки зрения - это false positive.

Валгринд, кстати, меня тоже в некоторых местах раздражал, казалось что слишком уж умничает железяка чертова. Но потом, подумав, понял что правильно он возмущается. Теперь стараюсь как-то его умиротворить. В некоторых местах, само собой, не получается, BerkeleyDB например что-то там не инициализирует, pthreads текут и т.п., но по возможности стараюсь чтоб было без предупреждений

Так ведь при тестировании все

Так ведь при тестировании все вылезет.

Конкретно в LibRaw - куча унаследованного кода, который на Wall дает миллиарды триллионов ложных срабатываний, а править эти места не хочется. В частности по той причине, что много кода генерируется именно из dcraw.c, который мержится средствами git. Если в моей копии поправить - мержиться перестанет.

Ну и с Valgrind/подобными - тоже ведь не так просто. Я пользуюсь Intel Inspector (по смыслу то же самое). Да, что-то он ловит, но я вот скажем аллоцированное на старте программы (гарантированно один раз) на финише обычно не освобождаю, ибо незачем. Оно это ловит и правильно ловит, но с моей точки зрения - это false positive.

А как народ умудряется без

А как народ умудряется без -Wall хотя бы иногда (а лучше еще и -pedantic для верности)? Я недавно вылавливал совершенно адовые ошибко-опечатки, которые глазами трудно заметить, типа "for (...;;<условие>)" или какие-то ошибки в snprintf-спецификаторах. Ну, можно, наверное, идеально писать, но это же не всем дано. Но это и правда не часто как-то нужно.

А вод динамический valgrind, в режиме проверки памяти/текущих ресурсов - прекрасен. Ну, опять же, кто-то, наверное, делает все c RAII, аккуратненько и с первого раза, но я так не умею, от первого знакомства с валгриндом вообще аж вспотел, настолько много всего текло и вообще удивительно как работало

Мы используем, тот же Coverity. False positive'ов много, и в

Мы используем, тот же Coverity. False positive'ов много, и вычищать было мучительно, но по ощущениям - польза от этого действия есть. Глупости всякие успешно отлавливает, вроде вот таких - http://trac.nginx.org/nginx/changeset/4937/nginx.

повторюсь -- достаточно определить layout и Layout1 через ен

повторюсь -- достаточно определить layout и Layout1 через енум, после этого даже ифы работают

1) Ну я согласен с тем, что так писать не надо. Но в том вид

1) Ну я согласен с тем, что так писать не надо. Но в том виде, в каком оно написано - это не ошибка и это видно если анализировать не только саму функцию, но и окружение.

2) Про unsigned short - я написал, что согласен именно по той причине, что domain specific неизвестен.

3) Про диапазон: дальше эта самая (unsigned)var < 5 используется для индексации массива - и ругается оно, что отрицательный индекс у массива. Ну, в тех местах, которые видел.

Ну то есть идея в том, что -

Ну то есть идея в том, что
- при регулярном использовании мы обнаружим багу *раньше* и потратим на ее исправление меньше сил
- а на готовом проекте - смысла мало, т.к. он уже работает и доля ложных срабатываний будет слишком большой?

Интересная мысля, надо ее подумать.

Да-да-да, у меня такое тоже бывало, что думаешь "от какая ца

Да-да-да, у меня такое тоже бывало, что думаешь "от какая цаца, не нравицца ему видите-ли! да идиты нафег!", а потом через какое-то "ух-ёёёё..." и дальше эхом от стен "мать-мать-мать..." )))

> Но в реальной жизни бывает два вида layout - и это явно пр

> Но в реальной жизни бывает два вида layout - и это явно прописано в вызывающем коде. Т.е. у машинки достаточно данных, чтобы сообразить, что это не 'High impact', а просто неаккуратненько.

Э, нет, батенька, не согласен я с вами тут.
Это сегодня явно прописано строго два варианта вызова и никаких больше. А завтра в проект придёт новый чувак, которому поставят задачу сделать третий лейяут и он имеет полное право не знать о таком неявном свойстве кода, посему будет честное обращение к неинициализированной памяти.
Это очень правильный ворнинг, имхо. Это не "неаккуратненько", это мина на будущее расширение.
Я бы переписал тот код как свитч с throw exception по дефолту.

> С этим я не хочу спорить - формально машинка права, а по факту в этих unsigned short живут размеры картинки и до 32767 они в ближайшие годы не дорастут.

))) "640кб хватит всем!", "до 2000-го года ещё много лет, успеем поправить!" :)
Ну, т.е. понятно, что машина-то всех тонкостей domain specific не знает, посему имхо тоже вполне правильно ругается.

> В частности, любимый коффиновский метод проверки диапазона значений 0..N одним действием машинка просто не чует:

А чо-как ругается? Вполне нормальный метод, имхо...

По вопросу: я специально не использую, но обычно ставлю студию на наивыший уровень ворнингов и если что возникает - стараюсь или переправлять, или если однозначно в данном случае не нужно - подавлять. Несколько раз меня эти варнинги ОЧЕНЬ спасали от тяжелого и трудноуловимого дебуга, поэтому просто принял для себя решение по возможности сразу писать правильно и таки прислушиваться в варнингам. Хотя специально отдельными тулзами обычно не пользуюсь. Согласен с тем, что в идеале это надо делать системным образом, но по моему опыту даже вот такое эпизодическое следование мне лично здорово помогало.

Есть такое мнение про системы

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

Нет никакого апстрима. Это именно contributed, конкретно в L

Нет никакого апстрима. Это именно contributed, конкретно в LibRaw.

Я с благодарностью такие куски кода принимаю, но что я при этом думаю - я никому не скажу!

а я уже привык везде лепить, только из-за этого варнинга пог

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

отправь патчи в апстрим! кстати, достаточно просто enum

отправь патчи в апстрим!
кстати, достаточно просто enum

Это чужой (contributed) код, пальцем не дотронусь!

Это чужой (contributed) код, пальцем не дотронусь!

а в твоем случае надо просто переписать через case и enum и

а в твоем случае надо просто переписать через case и enum и варнинга не будет.

я не про конкретно этот код. а про случаи типа когда первая

я не про конкретно этот код.
а про случаи типа когда первая итерация цикла гарантированно инициализирует переменную, использующуюся только после этого

а, вот в таком разе я особо не сравнивал, но мне показалось

а, вот в таком разе я особо не сравнивал, но мне показалось что примерно одинаково, все же.

gcc с -Wall ложно срабатывает чаще, чем этот Coverity. Т.е.

gcc с -Wall ложно срабатывает чаще, чем этот Coverity.

Т.е. предупреждений будет не 107, а бешеные мильены на конкретном коде.

Не, по смыслу оно право - если когда-нибудь появится Layout3

Не, по смыслу оно право - если когда-нибудь появится Layout3, то хорошо бы иметь переменную инициализированной хоть как-то.
Это правильно, в смысле что "хороший тон".

Но в данном наборе исходников - ошибки нет, да.

как-то не хочется из-за его паранойи лепить бессмысленную ин

как-то не хочется из-за его паранойи лепить бессмысленную инициализацию

Ну для gcc-то несложно подправить исходник так, чтоб больше

Ну для gcc-то несложно подправить исходник так, чтоб больше не ругался.
И ведь помогает, зараза такая, только на прошлой неделе долго ругал его за чрезмерную осторожность, пока не сообразил, что он прав, а у меня ошибка.

Pages

Subscribe to comments_recent_new