Подскажите пожалуйста утилиту, которая подсказывала бы неправильные вызовы close на уже закрытых дескрипторах. Недавно в проекте очень неприятный баг нашли, когда данные «читались» из файла, дескриптор которого ранее был ошибочно закрыт.
Последовательность воспроизведения ошибки такая. В некой забагованной библиотеке вызывается open для работы с портом ввода-вывода устройства. Когда работа завершается, вызывается соотв. close. Потом тот же самый дескриптор (по значению) перевыдается по вызову fopen в другой части программы, там читаются данные из файла. Во время чтения этих данных, по ошибке, в забагованной бибилиотеке вызывается close по тому же (по значению) дескрипотру. Из файла начинает читаться мусор.
Было бы неплохо иметь утилиту, которая обнаруживала подобные ошибке в заданном процессе. Например мы не нашли опции у valgrind, которые находили бы такие огрехи.