我希望能够检测我的函数(或它调用的任何其他函数)是否最终会在我的单元测试中调用某些特定函数(例如,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 ,则测试将以不太脏的方式(例如 not )失败。
理想情况下,这可以在任何系统上运行,但我现在可以接受只能在 linux 上运行的东西。这在某种程度上可能吗?也许通过替换 LD_PRELOAD hack malloc
,但我宁愿不必为我感兴趣的所有功能这样做。