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

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

мне кажется, что самым мудрым инструментом будут глазаА если кода много?
А если кода много?Беда в том, что только static тебе не поможет. Подумай на счёт глобальных переменных: им вовсе необязательно быть static.
Под реентрабельностью понимается thread safety или случай когда в цепочке вызовов одна функция встречается дважды (например, либа использует callbacks)? В первом случае добавляется совершенно отдельная группа проблем, которые никакой grep не найдет.
Я не знаю, как на писишках с этим, но кейловский компилятор для микропроцессоров чуть ли не прямым текстом сообщал, что он думает по поводу реентрабельности функции.
Беда в том, что только static тебе не поможет. Подумай на счёт глобальных переменных: им вовсе необязательно быть static.Да понятно. Про grep я образно выразился.
На самом деле код большей частью плюсовый, и мне кажется вполне логичным рефакторингом упаковка глобальных переменных в отдельный(ые) класс(ы) (в качестве статических хотя бы чтобы создать отдельный namespace, дающий представление о назначении этих переменных. + убьет потенциальные проблемы при линковке. А с C-шным кодом фиг что придумаешь.
Под реентрабельностью понимается thread safety
именно (*.so)
Потыкай палочкой в опцию компилятора для генерации map-файла.
Спасибо. Можно еще несколько ключевых слов? Мне пока не совсем ясно, что это такое.
Всё, нашел. Искать надо было в опциях линкера.
Оставить комментарий
Garryss
Дано: сторонний проект с кучей C-шного кода.В итоге требуется найти места, которые нарушают реентерабельность и пофиксить их.
Можно ли выполнить поиск таких мест более-менее аналитическим способом? Пока лучше, чем "grep static | grep -v const" не придумал.