Я хотел бы иметь возможность определить, вызовет ли моя функция (или любая другая функция, которую она вызывает) некоторые определенные функции (например, malloc
и free
) в моих модульных тестах: некоторые небольшие части моего программного требования времени, и я хотел бы убедиться, что никто не добавляет что-то, что могло бы вызвать случайное выделение в этих функциях (и чтобы мой конвейер CI проверял это автоматически).
Я знаю, что могу просто поставить точку останова на gdb, но в идеале я хотел бы сделать что-то вроде:
void my_unit_test() {
my_object obj; // perform some initialization that will allocate
START_CHECKING_FUNCTION(malloc); // also, operator new or std::allocate would be nice
obj.perform_realtime_stuff();
STOP_CHECKING_FUNCTION(malloc);
}
в идеале тест провалится не слишком грязным образом (например, не std::abort
), если в какой-то момент между двумя проверками будет вызвана функция malloc.
В идеале это должно работать на любой системе, но я могу жить с чем-то, что работает только на Linux. Возможно ли это каким-то образом? Может быть, через хак LD_PRELOAD, который заменит malloc
, но я бы не хотел делать это для всех интересующих меня функций.
malloc
отслеживают, сколько раз была вызвана функция, что помогает при отладке. Вы можете использовать это? - person 1201ProgramAlarm   schedule 31.12.2017malloc
? Вам абсолютно не нужно проверять это во время выполнения. - person tofro   schedule 13.01.2018