Как проверить C-шный код на реентерабельность?

Garryss

Дано: сторонний проект с кучей C-шного кода.
В итоге требуется найти места, которые нарушают реентерабельность и пофиксить их.
Можно ли выполнить поиск таких мест более-менее аналитическим способом? Пока лучше, чем "grep static | grep -v const" не придумал.

Maurog

Таким образом, функция, которая зависит только от своих параметров, не использует глобальные и статические переменные и вызывает только реентерабельные функции, будет реентерабельной.
мне кажется, что самым мудрым инструментом будут глаза

SCIF32

мне кажется, что самым мудрым инструментом будут глаза
а я думал, специалисты посоветуют мозг

Maurog

какой бы не был мозг, без глаз никак
а вот без мозга мона :grin:

Andbar

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

Garryss

мне кажется, что самым мудрым инструментом будут глаза
А если кода много?

kokoc88

А если кода много?
Беда в том, что только static тебе не поможет. Подумай на счёт глобальных переменных: им вовсе необязательно быть static.

ppplva

Под реентрабельностью понимается thread safety или случай когда в цепочке вызовов одна функция встречается дважды (например, либа использует callbacks)? В первом случае добавляется совершенно отдельная группа проблем, которые никакой grep не найдет.

bleyman

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

Garryss

Беда в том, что только static тебе не поможет. Подумай на счёт глобальных переменных: им вовсе необязательно быть static.
Да понятно. Про grep я образно выразился.
На самом деле код большей частью плюсовый, и мне кажется вполне логичным рефакторингом упаковка глобальных переменных в отдельный(ые) класс(ы) (в качестве статических хотя бы чтобы создать отдельный namespace, дающий представление о назначении этих переменных. + убьет потенциальные проблемы при линковке. А с C-шным кодом фиг что придумаешь.
Под реентрабельностью понимается thread safety

именно (*.so)
Потыкай палочкой в опцию компилятора для генерации map-файла.

Спасибо. Можно еще несколько ключевых слов? Мне пока не совсем ясно, что это такое.

Garryss

Всё, нашел. Искать надо было в опциях линкера.
Оставить комментарий
Имя или ник:
Комментарий: