2010-11-19 2 views
1

Я только что обнаружил, что некоторые части кода, над которым я работаю, неправильно используют записываемые статические данные, где он может/должен использовать постоянные данные.Обнаружение записываемых статических данных

Недостаток глупого поиска и замены для «статических» -> «статических констант», есть ли способ предотвратить запись всех «статических» данных, подобно тому, как можно делать явные данные о строковых строках Writeable?

Я использую toolchain GCC, цель разработки - x86.

+0

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

+0

Ну, цель состоит в том, чтобы быстро получить, какие поля/фактически/должны быть записаны, а не делать это требование сборки. – Christoffer

ответ

1

В некоторых библиотеках, которые вы используете, возможно записываемые статические данные. (Например, стандартные библиотеки C и C++). Создание этого const было бы плохим.

Возможно, вам лучше пройти свой код и изменить его вручную.

Вы можете использовать nm, чтобы получить список символов в файлах .o. На выходе nm первый столбец дает тип символа; буквы B, C, D, G или S указывают записываемые данные. В последнем столбце указывается имя переменной. Можно написать небольшой скрипт для анализа вывода nm и поискать его.

+0

Ах, конечно. Использование 'nm | grep -i "[BCDGS]" "дает мне список символов, которые не входят в разделы только для чтения. Спасибо, что посмотрели мою фактическую проблему, а не просто ответили на буквальный вопрос :-) – Christoffer

0

Я думаю, что лучший способ - добавить «const» ко всем переменным, которые у вас есть. Вы можете использовать «#define static static const» (обратите внимание, что он сломается там, где вы уже его изменили), но я не рекомендую это делать (сделает ваш код намного менее удобочитаемым и, возможно, сломает некоторые вещи, t объявить статические функции).