The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Статический анализатор PVS-Studio доступен для Linux (реклама), opennews (??), 25-Окт-16, (0) [смотреть все] –4

Сообщения [Сортировка по времени | RSS]


28. "Статический анализатор PVS-Studio доступен для Linux (реклам..."  +11 +/
Сообщение от CodeRushemail (?), 25-Окт-16, 13:04 
Реально вполне, только проверять надо постоянно, а не эпизодически (то же самое справедливо и для Valgrind, и для остальных "проверяльщиков").

Мой пример: боролся я однажды с интересным багом при инициализации дополнительных ядер процессора AMD Merlin Falcon в прошивке. Нулевое ядро там назвают BSP (BootStrap Processor), а остальные - AP (Application Processor), так вот, инициализация очередного AP иногда зависала на ровном месте в ~0.1% случаев (а т.к. процесс работы прошивки до этого времени детерминирован, то в таких зависаниях чаще всего виновато оборудование или код, который его неправильно использует).
Зависающая прошивка - это show stopper, т.е. пока это не починим, дальше разрабатывать нет смысла. Я просидел две недели в попытках понять, что не так, и пошел пробовать статические анализаторы, которые давали попробовать (AMI использует CppCheck для своего кода, но он совсем слабый по сравнению с любыми коммерческими анализаторами).
В итоге PVS-Studio нашла переменную в структуре, у которой был пропущен аттрибут volatile, а в коде было что-то вроде такого:
// Prepare CPU context structure
...
apStructPtr->InSync = 0;
...
// Send context to AP
...
// Wait for AP sync
while(apStructPtr->InSync) {
// Still waiting
}

Т.к. ни apStructPtr, ни InSync не были помечены как volatile, то компилятор просто выбрасывал цикл, т.к. он не влияет на наблюдаемое поведение и аналогичен while(0), в результате получалась гонка между внутренними процессами в CPU и продолжением исполнения, и выигрывали её чаще всего внутренние процессы, т.е. все работало почти всегда. Но потом стало больше ядер, вышли новые процессоры и более долгой синхронизацией, и все сломалось.
А PVS-Studio сразу сообщила, что вот тут место подозрительное, проверьте. Проверил, добавил volatile, баг исчез. Вот так и помогает, вполне реально.

Ответить | Правка | К родителю #5 | Наверх | Cообщить модератору

42. "Статический анализатор PVS-Studio доступен для Linux (реклам..."  +/
Сообщение от Аноним (-), 25-Окт-16, 14:11 
> А PVS-Studio сразу сообщила, что вот тут место подозрительное, проверьте.
> Проверил, добавил volatile, баг исчез.

Ну эээ... Расстрелы уже провели? Потому что - ну ёмоё, ожидание результата в глобальной переменной от другого ядра и без volatile? Кто код писал? Фамилию! Да шучу :)

Ответить | Правка | Наверх | Cообщить модератору

70. "Статический анализатор PVS-Studio доступен для Linux (реклам..."  +/
Сообщение от _ (??), 25-Окт-16, 17:14 
Трепло!
Расходимся пацаны ... он ещё сисек не мял, а уже лопочет чегото :-\
Ответить | Правка | Наверх | Cообщить модератору

45. "Статический анализатор PVS-Studio доступен для Linux (реклам..."  +/
Сообщение от Andrey_Karpov (ok), 25-Окт-16, 14:22 
Спасибо за интересный комментарий.
Ответить | Правка | К родителю #28 | Наверх | Cообщить модератору

62. "Статический анализатор PVS-Studio доступен для Linux (реклам..."  +1 +/
Сообщение от anonimm (?), 25-Окт-16, 15:55 
Зачем платить если есть coverity и clang????
Ответить | Правка | К родителю #28 | Наверх | Cообщить модератору

93. "Статический анализатор PVS-Studio доступен для Linux (реклам..."  +/
Сообщение от Aleksey (??), 25-Окт-16, 21:25 
Зачем покупать кофе, если вода дешевле?
Ответить | Правка | Наверх | Cообщить модератору

99. "Статический анализатор PVS-Studio доступен для Linux (реклам..."  +/
Сообщение от Аноним (-), 26-Окт-16, 00:42 
А что из этого кофе?
Ответить | Правка | Наверх | Cообщить модератору

120. "Статический анализатор PVS-Studio доступен для Linux (реклам..."  +/
Сообщение от Аноним (-), 26-Окт-16, 08:44 
> А что из этого кофе?

Ява, разумеется.

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру