отслеживание неинициализированных статических переменных

Мне нужно отладить уродливую и огромную математическую библиотеку C, вероятно, когда-то созданную f2c. Код злоупотребляет локальными статическими переменными, и, к сожалению, где-то он, кажется, использует тот факт, что они автоматически инициализируются значением 0. Если его функция входа вызывается с одним и тем же входом дважды, она дает разные результаты. Если я выгружаю библиотеку и снова загружаю ее, она работает правильно. Это должно быть быстро, поэтому я бы хотел избавиться от загрузки / выгрузки.

Мой вопрос в том, как обнаружить эти ошибки с помощью valgrind или любого другого инструмента, не просматривая весь код вручную.

Я ищу места, где локальная статическая переменная объявляется, сначала читается, а потом записывается. Проблема еще больше усложняется тем фактом, что статические переменные иногда передаются дальше через указатели (да, это так некрасиво).

Я понимаю, что можно утверждать, что подобные ошибки не обязательно обнаруживать автоматическим инструментом, поскольку в некоторых сценариях это именно то, что предполагалось. Тем не менее, есть ли способ сделать автоматически инициализированные локальные статические переменные «грязными»?

7
задан ftk 21 October 2011 в 09:28
поделиться