【发布时间】:2018-06-11 04:44:05
【问题描述】:
我希望能够检测我的函数(或它调用的任何其他函数)是否最终会在我的单元测试中调用某些特定函数(例如,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);
}
理想情况下,如果在两次检查之间调用了 malloc,测试将以不太脏的方式失败(例如,不是std::abort)。
理想情况下,这可以在任何系统上运行,但我可以接受目前只能在 linux 上运行的东西。这在某种程度上可能吗?也许通过 LD_PRELOAD hack 来替换 malloc,但我宁愿不必为我感兴趣的所有功能都这样做。
【问题讨论】:
-
一些
malloc实现会跟踪函数被调用的次数,以帮助调试。你能利用它吗? -
我只是看不出硬实时要求和动态内存分配之间有任何直接关系。
-
@seleciii44 要求是不做any动态内存分配。
-
seleciii44:基本上,在常见的“桌面”内核上,如果您调用 malloc(或任何其他类型的系统函数),您的线程很有可能会被操作系统抢占;即使不是,如果另一个线程同时调用 malloc 或 free,它也有可能被锁定。
-
1201ProgramAlarm: 看起来有点像panthema.net/2013/malloc_count 这样的东西确实可以工作。
标签: c++ c linux unit-testing dynamic-analysis