Комментарии 18
«Fill(m_letters, m_letters + sizeof(m_letters)/sizeof(*m_letters), 0);»
А какой нибудь анализатор в итоге выловил выход за границу массива, если бы он задавался статически?
Вообще, как по мне, то пример несколько надуманный. Если уж и задавался массив статически, то программист вместо sizeof(m_letters)/sizeof(*m_letters) написал бы, скорее всего MAX_COUNT. Хотя и тот и тот варианты ведут к выходу за границу массива.
А в целом, согласен с утверждением, что «Надеюсь нам удалось показать отличия между статическим и динамическим анализатором кода. Эти два подхода хорошо дополняют друг друга.»
А какой нибудь анализатор в итоге выловил выход за границу массива, если бы он задавался статически?
Вообще, как по мне, то пример несколько надуманный. Если уж и задавался массив статически, то программист вместо sizeof(m_letters)/sizeof(*m_letters) написал бы, скорее всего MAX_COUNT. Хотя и тот и тот варианты ведут к выходу за границу массива.
А в целом, согласен с утверждением, что «Надеюсь нам удалось показать отличия между статическим и динамическим анализатором кода. Эти два подхода хорошо дополняют друг друга.»
По поводу выловит ли выход за границу массива какой-то анализатор. Динамический выявит почти наверняка. Статический — может выловит, может нет. Зависит от того, как задано количество обрабатываемых байт (если оно из файла читается, то тут никак… :). Например, вот здесь есть примеры, когда анализатор PVS-Studio обнаруживает выход за границу массива (хотя в основном там случаи, когда обрабатывается только часть массива).
Не понимаю. Что значит надуманный? Ошибка взята из кода маленького проекта, который прислал потенциальный клиент, чтобы мы там что-то попробовали найти.
Вообще, как по мне, то пример несколько надуманный.
Не понимаю. Что значит надуманный? Ошибка взята из кода маленького проекта, который прислал потенциальный клиент, чтобы мы там что-то попробовали найти.
НЛО прилетело и опубликовало эту надпись здесь
В вашем варианте предполагается вызов функции?
НЛО прилетело и опубликовало эту надпись здесь
В Debug-режиме будет лишний вызов функции.
До сих пор еще ктото пользуется Valgrind? это практически неюзабельный софт для больших и сложных проектов. А в проектах с реалтаймовыми требованиями — совершенно не применим. Несколько лет уже используем clang.llvm.org/docs/AddressSanitizer.html, деградация производительности всего 2-3 раза что вполне приемлимо и не сопоставимо с 50-100 для valgrind.
> ASAN не всегда находит не освобожденную в конце программы память?
ASAN не ищет утекшую память, а все возможные нарушения доступа к памяти. он так же с успехом применяется во в крупных проектах типа Chromium с 2011 года.
>А LSAN ещё считается экспериментальным.
Это же отладочный инструмент, если он с успехом помогает вам искать баги и утечки то какая разница эксперементальный он или нет. LSAN пользуемся чуть меньше года и пока опыт только положительный.
В своем проекте делаем несколько ежедневных сборок одна из них отладочная (с внедренным address-sanitizer), эта сборка прогоняется через те же автотесты что и основная сборка. Все это позволяет быстро и без особых усилий выявлять появляющиеся проблемы.
ASAN не ищет утекшую память, а все возможные нарушения доступа к памяти. он так же с успехом применяется во в крупных проектах типа Chromium с 2011 года.
>А LSAN ещё считается экспериментальным.
Это же отладочный инструмент, если он с успехом помогает вам искать баги и утечки то какая разница эксперементальный он или нет. LSAN пользуемся чуть меньше года и пока опыт только положительный.
В своем проекте делаем несколько ежедневных сборок одна из них отладочная (с внедренным address-sanitizer), эта сборка прогоняется через те же автотесты что и основная сборка. Все это позволяет быстро и без особых усилий выявлять появляющиеся проблемы.
Здесь: www.viva64.com/ru/b/0158/ у графика подпишите оси. Порадуйте математиков.
Порадовал.
Пользуясь случаем, передаю всем привет. Плюс прошу читателей запостить в твиттер ссылку на описание C++ Quiz.
Пользуясь случаем, передаю всем привет. Плюс прошу читателей запостить в твиттер ссылку на описание C++ Quiz.
Оппа, так это плотность. Это сразу менят восприятие. Я сначала думал, что это количество ошибок. Ещё удивился, что растёт вполне себе линейно.
Если позволите ещё немного позанудствовать, то теперь не указано, в чём измеряется плотность. Да, в таблице выше указано, что в кол-ве на 1000 строк кода. Но на графике единиц измерения нет. Первая мысль была про проценты. Радовала максимальная плотность в 100% :)
Если позволите ещё немного позанудствовать, то теперь не указано, в чём измеряется плотность. Да, в таблице выше указано, что в кол-ве на 1000 строк кода. Но на графике единиц измерения нет. Первая мысль была про проценты. Радовала максимальная плотность в 100% :)
Ради интереса проверил сам Valgrind: Проверяем код динамического анализатора Valgrind с помощью статического анализатора.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Valgrind — это хорошо, но недостаточно